PowerShell でコピーアイテム アクセスが拒否される: テスト済みの 8 つの修正方法
ファイル エクスプローラーでは問題なくプロセスを実行できるため、PowerShell で Copy-Item アクセスが拒否されたエラーが発生すると困惑します。これは、ネットワーク共有への書き込み時に NTFS アクセス許可が不足しているために発生しますが、以下の解決策ですぐに問題を解決できます。
PowerShell で Copy-Item Access is Denied エラーを修正するにはどうすればよいですか?
1. 正しいNTFS権限を確認する
- Win+を押してファイルエクスプローラーEを起動します。
- 変更するフォルダーに移動します。
- フォルダを右クリックして、「プロパティ」を選択します。
- 「セキュリティ」タブをクリックします。
- 権限を変更するには、 「編集」ボタンをクリックします。
- ユーザー アカウントまたは PowerShell スクリプトを実行しているアカウントにフル コントロール権限があることを確認します。
- 「適用」をクリックし、「OK」をクリックして変更を保存します。
適切な NTFS アクセス許可を確保すると、スクリプトがフォルダーに書き込むことができるようになり、アクセスの問題が解決されます。
2. 共有権限を確認する
- Win+を押して実行ダイアログを開きR、fsmgmt.msc と入力して を押しますEnter。
- 共有フォルダに移動します。
- フォルダを右クリックして、「プロパティ」を選択します。
- 「共有権限」タブをクリックします。
- PowerShell スクリプトを実行しているユーザーまたはグループにフル コントロール権限があることを確認します。
- 「適用」をクリックし、「OK」をクリックします。
ファイルのコピーを正常に行うには、NTFS と共有のアクセス許可の両方で書き込みアクセスを許可する必要があります。
3. 管理者としてPowerShellを実行する
- [スタート]ボタンをクリックします。
- 検索バーに「PowerShell」と入力します。
- Windows PowerShell を右クリックし、[管理者として実行]を選択します。
- Copy-Item スクリプトを再度実行します。
PowerShell を管理者として実行すると、保護されたシステム フォルダーとネットワーク共有への完全なアクセスが保証されます。
4. 資格情報なしでUNCパスを使用する
- New-PSDrive を使用して、ネットワークの場所用の新しい PowerShell ドライブを作成します。
New-PSDrive -Name "P"-PSProvider FileSystem -Root "\\network\path"-Persist
- 新しいドライブ文字を使用して Copy-Item を実行します (それに応じてソース パスと宛先パスを変更します)。
Copy-Item "P:\source\file"-Destination "P:\destination\path"
UNC パスを使用してネットワーク ドライブをマッピングすると、ネットワーク パスに関する資格情報関連の問題を回避できます。
5. PowerShellで環境変数を変更する
- 環境変数を PowerShell 構文で置き換えます。
Copy-Item -Path "E:\FolderA"-Destination "C:\Users\$($env:USERNAME)\AppData\Roaming\FolderB"-Recurse -Force
- あるいは、APPDATA 環境変数を直接使用します。
Copy-Item -Path "E:\FolderA"-Destination "$($env:APPDATA)\FolderB"-Recurse -Force
PowerShell で環境変数を正しく参照すると、パスが適切に解決されます。
6. PowerShell リモート処理を有効にする
- リモート マシンで次のコマンドを実行します。
Enable-PSRemoting -Force
- ユーザーがリモート マシン上でスクリプトを実行する権限を持っていることを確認します。
Set-PSSessionConfiguration -ShowSecurityDescriptorUI -Name Microsoft.PowerShell
- リモート コピーには ToSession パラメータを使用します。
$session = New-PSSession -ComputerName "remote_machine"-Credential "username"$source = "C:\path\to\source"$dest = "C:\path\to\destination"Copy-Item -Path $source -Destination $dest -ToSession $session -Recurse -Force
PowerShell リモート処理を有効にし、正しいセッション パラメータを使用すると、リモート ファイル操作がスムーズになります。
7. ユーザーアカウント制御(UAC)の問題に対処する
- 権限を昇格するための PowerShell スクリプトを作成します。
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell -Verb runAs -ArgumentList $MyInvocation.MyCommand.Definition Break }
- 昇格されたセッション内で Copy-Item コマンドを実行します。
Copy-Item "C:\source\file"-Destination "C:\Program Files (x86)\target\folder"-Force
スクリプト内で権限を昇格すると、UAC の制限を回避できます。
8. ダブルホップ問題に対処する
- 必要なファイルをリモート マシンに事前にコピーします。
Copy-Item -Path "C:\local\path\file"-Destination "\\remote_machine\path"-Force
- Invoke-Command を使用してリモート マシンでインストールを実行します。
Invoke-Command -ComputerName "remote_machine"-ScriptBlock { Copy-Item -Path "\\remote_machine\path\file"-Destination "C:\Windows\Temp"-Force Start-Process msiexec -ArgumentList "/i C:\Windows\Temp\installer.msi /quiet"-Wait }
ファイルを事前にコピーし、直接パスを使用すると、複数のリモート接続に関連する問題を回避できます。
これらの解決策に従うことで、PowerShell の Copy-Item: アクセスが拒否されました エラーを解決できるはずです。
ご提案やご質問がございましたら、下のコメント欄にご記入ください。
コメントを残す