PowerShell実行環境はわずかに破損していますか?


0

私は答えを期待していませんが、方向性を望んでいます。

ときどき、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スクリプトをエラーなしで毎日実行します。恐らく。多分。


Powershellを管理者として実行した場合の結果は何ですか?クライアントとリモートマシンは同じドメインにありますか?可能性のあるKerberosダブルホップの問題を考える。
ルート

@root:通常、PowerShellを管理者として実行しないので、答えがありません。クライアントとすべてのサーバーは同じドメインにあります。ダブルホップの問題についてはよく考えましたが、ここでは発生していません。非常によく似たコードが毎日すべてのサーバーに対してエラーなしで実行されます。(私は推測します。)
マイクシェリル 'キャットリコール'

で開始chkdskし、sfc /scannowそして何の結果は、PowerShellを再インストールに進んでいない場合。
harrymc


@JosefZ:そのリマインダーをありがとう。しかし、「gci -Path Cert:\」はある時点で失敗し、「gci -Path Cert:\ LocalMachine」は証明書を返しました。返される証明書が多すぎますが、証明書は返されます。
マイクシェリル 'キャットリコール'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.