私は現在のディレクトリの下にあるlog4net.dllのすべてのバージョンを再帰的に検索して一覧表示するためにPowerShell 5.0を使用しています。Get-ChildItemを使用しているときにUnathorizedAccessExceptionを回避する方法
Get-ChildItem log4net.dll -Recurse | % versioninfo | Export-Csv "C:\MyJunk\log4net.csv"
上記の文は、予想通り、バージョン情報を返す開始しますが、実行は、私がアクセス権限を持たない最初のフォルダで停止:
Get-ChildItem : The specified network name is no longer available.
At line:1 char:1
+ Get-ChildItem log4net.dll -Recurse | % versioninfo | Export-Csv "C:\M ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ReadError: (J:\ArcPlan_OracleWallet\Production:String) [Get-ChildItem], IOException
+ FullyQualifiedErrorId : DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand
Get-ChildItem : Access is denied
At line:1 char:1
+ Get-ChildItem log4net.dll -Recurse | % versioninfo | Export-Csv "C:\M ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-ChildItem], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.GetChildItemCommand
私はAdminstratorとしてのWindows PowerShell ISEを実行しています。 ExecutionPolicyはRemoteSignedであり、$ ErrorActionPreferenceはContinueです。
理想的には、スクリプトに各フォルダのACLを問い合わせてアクセス権のないすべてのフォルダ(およびその内容)をバイパスしたいと思います。しかし、別のソリューションでは、ハードコードされたフォルダがバイパスされます。 PowerShellの初心者であり、私は後で焦点を当てました。
最初の問題フォルダ(名前)をバイパスして、その作業を取得できるかどうかを確認しましたが、同じ例外が発生し、処理が停止します。
Get-ChildItem log4net.dll -Recurse | Where-Object { $_.FullName -notmatch '\\ArcPlan_OracleWallet\\?'} | export-csv 'C:\MyJunk\log4net.csv'
ありがとうございます。
'Get-ChildItem -Recurse -ErrorAction SilentlyContinue'? –
@Ansgar。リプレイをありがとう。私はまだアクセスが拒否された例外を取得します。 –
'指定されたネットワーク名は使用できなくなりました'このエラーメッセージは間違っていますか、それとも本当にネットワークに問題がありますか?これがスクリプトの実行が停止する理由でしょうか? – sodawillow