私は答えを期待していませんが、方向性を望んでいます。
ときどき、PowerShell ISEが動作しているように見えることもあります。奇妙さはどこからともなく現れるようです。動作を再現する方法が見つかりません。
3日前、CERT:\ドライブで動作するコードを書いていましたが、Intellisense は証明書プロバイダー()ではなく、ファイルシステムプロバイダー(-File
および-Directory
)のパラメーターを示しました-ExpiringInDays
。
今日、このコードは例外を発生させました。
Invoke-Command -ComputerName OneServer -Credential $admin `
-ScriptBlock {Get-ChildItem -Path CERT:\ -Recurse -ExpiringInDays 366}
システムは指定されたデバイスまたはファイルを開けません + CategoryInfo:NotSpecified:(:) [Get-ChildItem]、Win32Exception + FullyQualifiedErrorId:System.ComponentModel.Win32Exception、Microsoft.PowerShell.Commands.GetChildItemCommand + PSComputerName:oneserver
同じPowerShellセッションでローカルコンピューターでこのスニペットを実行すると、同じ例外が発生しました。
Get-ChildItem -Path CERT:\ -Recurse -ExpiringInDays 366
同じ例外CERT:
、CERT:\
とCERT:\*
。
を使用して1つのディレクトリをさらに深くすると-Path CERT:\LocalMachine
、例外を発生させることなく実行されましたが、現在から数年(366日以上)有効期限が切れる証明書を返しました。
別のPowerShellセッションに切り替えて、両方のスニペットに貼り付けたところ、両方とも正常に実行されました。変数$admin
は両方のセッションで正しく設定されます。私には、これは実行環境で何かがおかしいと指摘しているようです。しかし、すぐ上で、Invoke-Commandとローカルコマンドが同じエラーを発生させました。分かりません。
PowerShellイベントログ(Microsoft / Windows / PowerShell / Operationalの下)には、その例外のエラーは表示されませんが、Invoke-Commandに関連する「アクセスが拒否されました」エラーが表示されます。
WSManは、エラーコード5のエラーを報告しました。 エラーメッセージ:リモートサーバーoneserverへの接続は、次のエラーメッセージで失敗しました:アクセスが拒否されました。
これは実行環境に関係していると思います。別のPowerShellセッションで同一のコードを実行するとうまくいきました。
関連する可能性のあるその他のもの
- シャットダウン、ログアウト、または再起動するのは、Windowsから強制された場合のみです。
- 通常、複数のPowerShell ISEウィンドウを開いています。彼らは何日も開いたままになるかもしれません。その間、彼らはうまく働くように見えます。(しかし、私は本当に知っているだろうか?)
- あるウィンドウでは変数のないコードが失敗したり、奇妙な出力を生成したりするが、別のウィンドウでは期待どおりに動作する場合があります。出力がおかしいといつも気づくとは限りません。(PowerShellは、2020年までに証明書が期限切れにならないことを教えてくれます。それは正しいですか、それとも奇妙ですか?常にわかりません。)
- 奇妙なIntelliSenseの動作(上記)。
- Pesterユニットテストは、ISEを開くたびにすべての製品コードに対して実行されます。時々、それらの束は失敗します。それらを手動で再度実行すると、成功します。新しいISEウィンドウを開くと、成功します。
この種の問題を特定するにはどうすればよいですか?
PS> $ PSVersionTable 名前値 ---- ----- PSVersion 5.1.15063.413 PSEditionデスクトップ PSCompatibleVersions {1.0、2.0、3.0、4.0 ...} BuildVersion 10.0.15063.413 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0。
リモートサーバーも同様です。自動化されたジョブは、すべての運用サーバーに対してInvoke-Commandスクリプトをエラーなしで毎日実行します。恐らく。多分。
chkdsk
し、sfc /scannow
そして何の結果は、PowerShellを再インストールに進んでいない場合。