[解決済み] Get-ChildItem -force で My Documents フォルダとその他の接続ポイントに "Access Denied" を報告する。
質問
ファイルを置き換えるスクリプトを書きました。 ファイルの名前と、検索元のベースロケーションをパラメータとして渡しています。 ワーカーラインは次のとおりです。
$SubLocations = Get-ChildItem -Path $Startlocation -Recurse -include $Filename -Force |
Where { $_.FullName.ToUpper().contains($Filter.ToUpper())}
このような場合、$Startlocationをquot;C: \Users" に設定しましたが、他のユーザーのフォルダを検索しようとすると、アクセス拒否されます。 私はこのマシンのフル管理者であり、管理者としてpowershellを実行することはすでに試しました。 私はWindowsエクスプローラ経由ですべてのファイルに問題なくアクセスすることができます。 何かいい方法はないでしょうか?
Get-ChildItem : Access to the path 'C:\Users\jepa227\Documents\My Music' is denied.
At C:\Users\krla226\Google Drive\Documents\PowerShell\Replace-File.ps1:35 char:46
+ $SubLocations = Get-ChildItem <<<< -Path $Startlocation -Recurse - include $Filename -Force |
+ CategoryInfo : PermissionDenied: (C:\Users\jepa227\Documents\My Music:String) [Get-ChildItem], Una
uthorizedAccessException
+ FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand
アップデイト
GCI経由で動作させることはできませんでしたが、WMIを使用して問題を解決することができました。 興味のある方のために。
$SubLocations = Get-WmiObject -Class cim_datafile -Filter "fileName = '$filename' AND Extension = '$extension'" |
Where { $_.Name.ToUpper().contains($Filter.ToUpper()) }
解決方法は?
Windows7マシンで、"admin"という管理ユーザーでログインし、昇格権限でpowershellを実行し、UACを無効にして以下のコマンドで再現することができました。
get-childitem "c:\users\Admin\my documents"
そして
cd "c:\users\admin\my documents"
get-childitem
記事を元に作成 こちら マイドキュメント、マイミュージックなどは、Vista以前のソフトウェアとの後方互換性のために、ジャンクションポイントとして定義されているようです。Powershellはジャンクションポイントをうまく扱えません。いくつかのオプションがあるようです。
1) Get-ChildItem コマンドから -force を削除する。おそらくこれが最善の策です。
get-childitem c:\users -recurse
はエラーなく動作し、ジャンクションポイントやAppDataのようなシステムディレクトリはスキップされます。
編集後記
-Force
は当面の問題を解決しますが、必ず
すべて隠された
の項目だけでなく、アクセス拒否のエラーの原因となる隠れた接続点にも注意が必要です。
2) どうしても必要な場合は
-Force
何らかの理由で、プログラムによって各サブディレクトリを再帰的に検索し、分岐点をスキップすることができます。
この記事
には、ジャンクションポイントを特定するための仕組みが書かれています。.ps1スクリプトファイルでのスケルトンは、次のようになります。
Param( [Parameter(Mandatory=$true)][string]$startLocation )
$errorActionPreference = "Stop"
function ProcessDirectory( $dir )
{
Write-Host ("Working on " + $dir.FullName)
# Work on the files in this folder here
$filesToProcess = ( gci | where { ($_.PsIsContainer -eq 0) } ) # and file matches the requested pattern
# process files
$subdirs = gci $dir.FullName -force | where {($_.Attributes -band [IO.FileAttributes]::ReparsePoint) -eq 0 -and ($_.PsIsContainer -eq 1) -and (![string]::IsNullOrEmpty($_.FullName))}
foreach( $subdir in $subdirs )
{
# Write-Host( $subdir.Name + ", " + $subdir.FullName )
if ( $subdir -ne $null )
{
ProcessDirectory -dir $subdir
}
}
}
$dirs = get-childitem $startLocation -force
$dirs | foreach { ProcessDirectory -dir $_ }
関連
-
[解決済み] Connect-VIServer は、渡された資格情報では動作しないが、統合された認証では動作する。
-
[解決済み] PowerShell起動時に「動的操作はhomogenous appdomainでしか実行できない」エラーが発生する。
-
[解決済み] AzureのAdd-AzureDiskが動作しない
-
[解決済み] Powershellでパラメータを切り替える
-
[解決済み] PowerShellでショートカットを作成する方法
-
[解決済み] PowerShellで改行するには?
-
[解決済み] PowerShell モジュールを全ユーザーに持続的にインストールする
-
[解決済み] PowerShellを使用してSFTPにファイルをアップロードする
-
[解決済み] Windows PowerShellでファイルが存在するかどうかをチェックする?
-
[解決済み] PowerShellスクリプトから終了コードを返す
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] powershellでパラメータ'Path'がNULLのため引数を結合できないエラーの取得
-
[解決済み] Powershellスクリプトから7-Zipを実行する
-
[解決済み] Invoke-Sqlcmd エラー : リモート DB サーバを呼び出すために powershell を実行すると、ユーザ xxxx のログインに失敗しました。
-
[解決済み] xPath を使用する Powershell スクリプトの .SelectSingleNode が web.config ファイルから値を抽出する際に動作していない
-
[解決済み] PowerShell NTFSの高度なパーミッションの設定
-
[解決済み] Powershellでパラメータを切り替える
-
[解決済み] グローバル変数名が関数に渡された変数である関数からPowerShellのグローバル変数を設定する
-
[解決済み] PowershellでTimeZoneを設定する方法
-
[解決済み] PowerShellで変数とその型がBooleanであることを宣言する方法は?[重複している]をクリックします。
-
[解決済み] Windows Server 2016で、すべてのPowerShellセッションのコマンド履歴を確認するにはどうすればよいですか?