タグ付けされた質問 「powershell」

Microsoftの対話型シェル、スクリプトおよびプログラミング言語、および周辺環境。Microsoftソフトウェア(Windows、Exchange、SharePoint、クラウドサービスのAzureやOffice 365を含む)を管理するシステム管理者が一般的に使用するPowerShellは、Windowsにデフォルトで含まれており、VBスクリプトなどの以前の言語から引き継がれます。

1
非管理サービスアカウントとしてpowerhshellを使用したサービスのスケジュールされた再起動
打ち倒される前に、タスクをスケジュールする方法、powershellでサービスを再起動する方法、またはサービスを再起動するための特権を管理者以外のアカウントに与える方法を知っています。それは問題ではありません。ただし、問題はこれら3つのタスクすべてを組み合わせた組み合わせです。 ネットワークフォルダー上のファイルを処理する必要があるWindowsサービスがあります。したがって、実際には単なる通常のドメインアカウントである「サービスアカウント」でログオンします。このドメインアカウントは管理者ではありませんが、上記のフォルダーへのアクセス権があります。サービスは正常に実行され、仕事をします。 ただし、ファイルの1つにエラーがあり、他のファイルの処理を妨げることがあります。通常、誰かが気付くまでに時間がかかり、いくつかのバックログがあります。 そこで、Powershellでこれらのエラーファイルのネットワークフォルダーをポーリングする監視スクリプトを作成しました。ファイルが見つかった場合、ファイルはレビューのために一時フォルダーに移動され、サービスを再起動する必要があります。 サービスを開始および停止するために、グループポリシーを通じてサービスアカウントの特権を与えました。 サービスアカウントでサーバーにログオンすると、サービスMMCを使用してサービスを手動で再起動できます。また、PowerShellスクリプトを実行することもできます。これは、フォルダーのポーリング、ファイルの移動、サービスの再起動など、本来の動作を正確に実行します。すごい! 次のフェーズでは、10分ごとに実行されるスケジュールされたタスクを作成しました。タスクは、サービスと同じサービスアカウントを使用して、powershellスクリプトを実行します。「最高の特権で実行する」ボックスがチェックされています。先ほど言ったように、powershellスクリプトはネットワークドライブにアクセスする必要があるため、ローカルサーバー管理者として実行することはできません。(できる限り最小限の特権の原則を実装しようとします。) ローカルセキュリティポリシーMMCを使用して、サービスアカウントにローカルサーバーの「バッチジョブとしてログオン」権限を与えました。 今、私が理解できない部分について:スケジュールされた時間に、スケジュールされたタスクが正常に完了し、powershellスクリプトが実行されています。スクリプトはフォルダをポーリングし、エラーファイルは移動されます。動作しないのは、サービスを再起動することだけです...?!繰り返しますが、同じユーザーとしてスクリプトを手動で実行すると完全に機能しました。 イベントビューアーにはあまり表示されませんが、スクリプトのログにこのエラーが表示されます。 TerminatingError(Stop-Service): "コンピューター '。'でサービスコントロールマネージャーを開けません。この操作には他の特権が必要な場合があります。" サービスを再起動するために使用するコマンドは次のとおりです。 Stop-Service -Verbose -DisplayName $($service[1]) ... Start-Service -Verbose -DisplayName $($service[1]) (Windows Server 2012 R2およびPowerShellバージョン4を2008 R2ドメインで使用しています。) 更新: subinaclを使用してユーザーのサービス権限を設定し(ここで説明)、SDDL文字列を手動で設定(ここで説明)したため、制御フラグは次のようになりました(A ;; CCLCSWRPWPDTLOCRRC ;;; S-1- X-XX-XXXXXXXXXX-XXXXXXXX-XXXXXXXXX-XXXX)。また、GPOでサービスの特権をフルコントロールに設定しようとしました。これらのいずれも問題を解決しませんでした。これは、権限を持つ私に問題がなければなりませんどこかに私は、サーバー上のローカル管理者であるドメインアカウントを使用してタスクをスケジュールするとき、それはうまく動作しますので、私はまだ、見下ろすだということ。

1
WSUSの更新プログラムの説明を変更できますか?
マイクロソフトの各パッチ日に、クライアントに承認したい非常に大量の新しい更新プログラムがあります。ただし、「すべての更新プログラムを承認して続行する」の代わりに、各更新プログラムに関する情報をナレッジベースの記事で収集し、これが重要な更新プログラムであるかどうかを判断します。 クライアントのブラウザに対応するKB番号を入力し、Webページがロードされるのを待つ必要があるため、これは非常に退屈なタスクです。マイクロソフトがWSUSコントロールパネルの更新説明ボックスを使用して、本当に役立つ詳細情報を表示しないのはなぜだろうと思っていました。代わりに、私の更新のすべては次のとおりです。 この更新プログラムをインストールして、Windowsの問題を解決します。この更新プログラムに含まれる問題の完全な一覧については、関連するマイクロソフトサポート技術情報の記事を参照してください。このアイテムをインストールした後、コンピューターを再起動する必要があります。 私は必要な情報を追加する小さなPowershellスクリプトについて考え始めました。しかし、最初のステップで失敗しました。これは、更新の説明を手動で変更することです。 PS C:\ Users \ Administrator> $ wsus = Get-WsusServer PS C:\ Users \ Administrator> $ update = $ wsus.SearchUpdates( 'KB3013791') PS C:\ Users \ Administrator> $ update [0] .Description この更新プログラムをインストールして、Windowsの問題を解決します。この更新プログラムに含まれる問題の完全な一覧については、関連するマイクロソフトサポート技術情報の記事を参照してください。このアイテムをインストールした後、コンピューターの再起動が必要になる場合があります。 PS C:\ Users \ Administrator> $ update [0] .Description = '"0x00000133" Windows 8.1またはWindows Server 2012 R2に障害のあるハードウェアがある場合の停止エラー …

1
SCCM Powershell検出スクリプトはどのコンテキストで実行されますか?
AllSigned実行ポリシーを使用して、クライアントでPowerShell検出スクリプトを使用してようやく成功しました。(ヒント:最新のサービスパックをインストールし、Adam Meltzerの回避策を使用して動作し始めました。) PowerShellスクリプトを使用してアプリケーションを検出することが実用的になったので、次のことを疑問に思います。 SCCMクライアントはどのような状況でPowerShell検出スクリプトを実行しますか?システム?ユーザー? コンテキストは、展開タイプで「ユーザー用にインストール」または「システム用にインストール」のどちらを選択したかによって異なりますか? このトピックに関するドキュメントはかなり少ない。SCCM PowerShell検出スクリプトについて私が見つけた最良のリソースは、このKloudのブログ投稿ですが、コンテキストの問題については言及していません。

1
Set-RDSessionCollectionConfiguration接続ブローカーはlocalhostに接続します
Windows 8マシンのPowerShellコンソールから次のコマンドを実行し、Server 2012 R2 RDS Connection Brokerを構成しようとしています。 Import-Module RemoteDesktop Set-RDSessionCollectionConfiguration -CollectionName "Example" -CustomRdpProperty "gatewayhostname:s:rdp.example.com" -ConnectionBroker "ep-ts01.ad.example.com" ただし、使用する接続ブローカーを指定している場合でも、常に接続しようとしlocalhostます: New-PSSession:[localhost]リモートサーバーlocalhostへの接続に失敗し、次のエラーメッセージが表示されました。要求で指定された宛先に接続できません。宛先のサービスが実行されており、要求を受け入れていることを確認します。宛先(最も一般的にはIISまたはWinRM)で実行されているWS-Managementサービスのログとドキュメントを参照してください。宛先がWinRMサービスの場合、宛先で次のコマンドを実行してWinRMサービスを分析および構成します: "winrm quickconfig"。詳細については、about_Remote_Troubleshootingヘルプトピックを参照してください。 ただし、Get-RDSessionCollection -ConnectionBroker ep-ts01.ad.example.com正常に動作し、コレクションを返します。 Enter-PSSession ep-ts01.ad.example.comそこから実行する場合も同じです。ただし、サーバー自体からコマンドを実行した場合(つまり、リモートではない場合)、正常に機能します。 どうすれば修正できますか?

4
Windows Powershellで2つのフォルダーを比較するにはどうすればよいですか?
Windows Powershellを使用して、2つのフォルダー構造のコンテンツの違いを見つけようとしています。次の方法を使用してファイル名が同じであることを確認しましたが、この方法ではファイルの内容が同じかどうかはわかりません。 $firstFolder = Get-ChildItem -Recurse folder1 $secondFolder = Get-ChildItem -Recurse folder2 Compare-Object -ReferenceObject $firstFolder -DifferenceObject $secondFolder このServerFaultの質問で説明されている手法は、単一のファイルを比較するために機能しますが、これらのフォルダーにはさまざまな深さの何百ものファイルが含まれています。 解決策は、必ずしもファイル内の具体的な違いを教えてくれる必要はありません-それだけです。日付などのメタデータの違いには興味がありません。
11 powershell  diff 

5
Exchange 2010で「送信者」権限を付与できません
Exchange 2010の1人のユーザーに「送信者」アクセス許可を与えようとしています。実行しているPowershellコマンドは次のとおりです。 Add-ADPermission "User1" -User "Ourdomain\User2" -Extendedrights "Send As" Powershellは次のエラーを返します。 DC.OurDomain.priでActive Directory操作が失敗しました。このエラーは再試行できません。追加情報:アクセスが拒否されました。Active Directoryの応答:00000005:SecErr:DSID-031521D0、問題4003(INSUFF_ACCESS_RIGHTS)、データ0 + CategoryInfo:WriteError:(0:Int32)[Add-ADPermission]、ADOperationException + FullyQualifiedErrorId:EDBB94A3、Microsoft.Exchange.Management.RecipientTasks。 AddADPermission 私はPowershellコマンドの複数の代替手段を試しました-すなわち。-Identityなどを使用しますが、それとEMCウィザードはすべて同じエラーを返します。 「INSUFF_ACCESS_RIGHTS」がコマンドを実行している私を指しているのか、送信者権限を与えているユーザーを指しているのかわかりません。 Microsoft Technetの「メールボックスの送信者としてのアクセス許可の管理」 Webページをフォローしています:http : //technet.microsoft.com/en-us/library/bb676368.aspx これを行うために必要な2つの権限を追加しました。 組織管理 受信者管理 しかし、それは助けにはなりません。何か案は? 更新 次のことを行う場合: [高度な機能]ビューで[ADユーザーとコンピューター]を開きます User1のプロパティに移動します [セキュリティ]タブの[詳細設定]をクリックします 「追加」を選択します 「User2」に入力し、「送信」を選択します ADUaCを閉じて再度開き、新しいアクセス許可を再度確認すると、ADUaCがまだ存在します。約10分後に戻った場合、これらの権限は失われています。user1はuser1のセキュリティ権限にまったく表示されません。 これまでにこの種のADの動作を見たことはないと思います。

5
複数の値を持つPowershell Switchステートメント
以下の例のように、複数の可能な値を含むswitchステートメントをどのように持つことができるか、誰でも知っていますか? switch ($myNumber) { 1 3 5 7 9 { write-host "Odd" } 2 4 6 8 10 {write-host "Even" } } 以前はVBScriptで簡単だったので、単純なものが欠けているだけだと確信しています。 例:VBScript Select Case myNumber Case 1,3,5,7,9 MsgBox "Odd" Case 2,4,6,8,10 MsgBox "Even" End Select 事前に乾杯、 ベン
11 powershell 

7
Windows 7でPowerShellまたはコマンドラインを使用してWindows機能をオンまたはオフにするにはどうすればよいですか?
sysocmgrWindows XP、servermanagercmdサーバー2008でスクリプトを作成しましたservermanagerが、サーバー2008 R2に機能をインストールするために新しいPowerShellモジュールを使用する必要があることがわかりました。そこ。 Windows 7でコマンドラインまたはPowerShellを使用してWindows機能をインストールするにはどうすればよいですか?

2
すべての既存ユーザーとすべての新規ユーザーにHKCUキーと値を追加する最良の方法は?
既存のすべてのユーザープロファイルとデフォルトプロファイルに対して、特定のOUのすべてのマシンにHKCUキーと値を追加する必要があります。これにアプローチする最良の方法は何ですか? すべてのNTUSER.DATを列挙および反復して、ハイブをロードし、キーを追加し、ハイブをアンロードできましたが、それはそれを行うための不格好な方法のようです。 誰もがより良いアイデアを持っていますか?これをスクリプト化し(できればPowerShell)、可能であれば変更をプッシュしたいのですが、グループポリシーログオンスクリプトも機能します。

2
PowerShellパフォーマンスの違いフィルターと関数
現在、PowerShellに関する洞察を得るために、Windows PowerShell 3.0のステップバイステップブックを読んでいます。 201ページで、作成者は、同じ機能を持つ関数よりもフィルタの方が高速であることを示しています。 このスクリプトは、自分のコンピューターで2.6秒かかります。 MeasureAddOneFilter.ps1 Filter AddOne { "add one filter" $_ + 1 } Measure-Command { 1..50000 | addOne } そしてこれは4.6秒 MeasureAddOneFunction.ps1 Function AddOne { "Add One Function" While ($input.moveNext()) { $input.current + 1 } } Measure-Command { 1..50000 | addOne } このコードを実行すると、彼の結果の正反対が得られます。 .\MeasureAddOneFilter.ps1 Days : 0 Hours …
11 powershell 

3
関数にパラメーターを渡す方法は?
PSスクリプトでSVN作業コピーを処理する必要がありますが、関数に引数を渡すことができません。ここに私が持っているものがあります: function foo($arg1, $arg2) { echo $arg1 echo $arg2.FullName } echo "0: $($args[0])" echo "1: $($args[1])" $items = get-childitem $args[1] $items | foreach-object -process {foo $args[0] $_} 私はと$arg[0]し$arg1てfoo、そして$arg[1]として渡したいです$arg2。ただし、機能しません。何らかの理由$arg1で常に空です。 PS C:\Users\sbi> .\test.ps1 blah .\Dropbox 0: blah 1: .\Dropbox C:\Users\sbi\Dropbox\Photos C:\Users\sbi\Dropbox\Public C:\Users\sbi\Dropbox\sbi PS C:\Users\sbi> 注:"blah"パラメータは次のように渡されていません$arg1。 これは陽気なほど簡単なことだと確信しています(私はPSを始めたばかりで、まだ非常に不器用な気がします)。
11 powershell 

5
Powershellを介してIIS APPPOOL \ *アカウントのACL権限を追加するにはどうすればよいですか?
新しいWebサイトのIISアカウントを設定して、アクセス許可を変更できるようにしたいのですが。次のスクリプトがあります。 function Set-ModifyPermission ($directory, $username, $domain = 'IIS APPPOOL') { $inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit" $propagation = [system.security.accesscontrol.PropagationFlags]"None" $acl = Get-Acl $directory $user = New-Object System.Security.Principal.NTAccount($domain, $username ) $accessrule = New-Object system.security.AccessControl.FileSystemAccessRule($user, "Modify", $inherit, $propagation, "Allow") $acl.AddAccessRule($accessrule) set-acl -aclobject $acl $directory } しかし、実行すると、次のようなエラーが発生します。 Set-Acl:このワークステーションとプライマリドメイン間の信頼関係が失敗しました。 これはがIIS APPPOOL本物のドメインではないためだと思いますが、一種の偽アカウントの奇妙な接頭辞です。このアカウントを参照して、これを機能させるための正しい方法はありますか?

3
サービスのStartTypeを自動に設定-遅延
を使用してSet-Service、StartTypeサービスのをの許容値の間で変更できますBoot, System, Automatic, Manual, Disabled。を使用するとservices.msc、一部のサービスをPriorityで起動するように設定できますAutomatic (Delayed Start)。ただし、Get-Serviceこれらの遅延開始サービスは引き続きとして報告されStartType : Automatic、Set-Serviceこれらの値を設定しようとするとエラーになります。 PowerShellを介してこのプロパティを設定できますか?それとも、UI またはGPOに制限されていますか?

3
Powershell $ profileディレクトリを変更する
$ profile変数が指す場所を変更する方法を教えてください。 PS H:\> $profile H:\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 H:\はネットワーク共有なので、プロファイルファイルを作成してpowershellをロードすると、次のようになります。 セキュリティ警告信頼できるスクリプトのみを実行してください。インターネットからのスクリプトは有用ですが、このスクリプトはコンピュータに害を及ぼす可能性があります。H:\ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1を実行しますか?[D]実行しない[R] 1回実行[S]一時停止[?]ヘルプ(デフォルトは "D"): Microsoftによると、$ profileの場所は%USERPROFILE%環境変数によって決定されます。本当じゃない: PS H:\> $env:userprofile C:\Users\username たとえば、私は私が望むように動作するXPマシンを持っています: PS H:\> $profile C:\Documents and Settings\username\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 PS H:\> $env:userprofile C:\Documents and Settings\username PS H:\> $env:homedrive H: PS H:\> $env:homepath \ $ profileが間違った場所を指しているVistaマシンからの同じ出力は次のとおりです。 PS H:\> $profile H:\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 PS H:\> $env:userprofile …

4
リストが空のときにforeachループを保護する
Powershell v2.0を使用して、X日より古いファイルを削除します。 $backups = Get-ChildItem -Path $Backuppath | Where-Object {($_.lastwritetime -lt (Get-Date).addDays(-$DaysKeep)) -and (-not $_.PSIsContainer) -and ($_.Name -like "backup*")} foreach ($file in $backups) { Remove-Item $file.FullName; } ただし、$ backupsが空の場合、次のようになります。 Remove-Item : Cannot bind argument to parameter 'Path' because it is null. 私はもう試した: foreachを保護する if (!$backups) Remove-Itemの保護 if (Test-Path $file -PathType …
10 powershell 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.