web-dev-qa-db-ja.com

PowerShell:同じプロセスがWindowsエクスプローラーで機能しているにもかかわらず、Copy-Itemが失敗する

定期的に(1時間ごとに)ファイルをコピーする必要があるスクリプトがあります。 Windowsエクスプローラーを使用してコピー元とコピー先のフォルダーを開き、問題なくファイルをコピーできます。

ただし、PowerShellで同じことをしようとすると、パスへのアクセスが拒否されましたというエラーが表示されます。共有のアクセス許可を確認しましたが、フルアクセスが可能です。これがPowerShellで失敗するのはなぜですか?

アイテムのコピーコマンド:

Copy-Item \\idmststtrm2\tns_admin$\tnsnames.ora -Destination \\bts13r2b\tnsnames -Force

エラー:

Copy-Item : Access to the path '\\bts13r2b\tnsnames\tnsnames.ora' is denied.
At line:1 char:1
+ Copy-Item \\idmststtrm2\tns_admin$\tnsnames.ora -Destination \\bts13r2b\tnsnames ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : PermissionDenied: (\\idmststtrm2\tns_admin$\tnsnames.ora:FileInfo) [Copy-Item], UnauthorizedAccessException
+ FullyQualifiedErrorId : CopyFileInfoItemUnauthorizedAccessError,Microsoft.PowerShell.Commands.CopyItemCommand

Copy-Item : Access to the path '\\bts13r2b\tnsnames\tnsnames.ora' is denied.
At line:1 char:1
+ Copy-Item \\idmststtrm2\tns_admin$\tnsnames.ora -Destination \\bts13r2b\tnsnames ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [Copy-Item], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.CopyItemCommand

編集:

宛先パスに対してGet-ChildItemを実行すると、フォルダーの内容を確認できます。

Get-itemの結果:

get-item \\idmststtrm2\tns_admin$\tnsnames.ora

Directory: \\idmststtrm2\tns_admin$


Mode                LastWriteTime     Length Name                                                                      
----                -------------     ------ ----                                                                      
-a---         3/10/2017   8:49 AM      14143 tnsnames.ora                                                              


get-item \\bts13r2b\tnsnames\tnsnames.ora

Directory: \\bts13r2b\tnsnames


Mode                LastWriteTime     Length Name                                                                      
----                -------------     ------ ----                                                                      
-a---          3/8/2017   9:51 AM      15991 tnsnames.ora 

get-item \\bts13r2b\tnsnames

Directory: 


Mode                LastWriteTime     Length Name                                                                      
----                -------------     ------ ----                                                                      
d----         3/21/2017  11:14 AM            tnsnames   

Xcopyを使用して試しました:

xcopy \\idmststtrm2\tns_admin$\tnsnames.ora \\bts13r2b\tnsnames\tnsnames.ora

Access is denied.
5
Geoff Dawdy

この問題は、ネットワーク共有への書き込み権限が原因です。共有のアクセス許可は正しく設定されていましたが、NTFSアクセス許可がありませんでした。システム管理者は、アカウントがフォルダに書き込むことができるようにするために、両方の権限セットを確実にする必要があります。これが正しく更新されると、スクリプトはネットワーク共有へのコピーを実行できました。

4
Geoff Dawdy

あなたは正しい考えを持っていますが、「管理共有」を使用して他のシステムにアクセスしようとするとどうなるでしょうか。

いくつかの標準変数を作成しました:$Sourceおよび$Target。次に、Get-ChildItemとスイッチ-Pathを使用して、必要なファイルまたはディレクトリを取得します。次に、Copy-Itemとスイッチ-Forceを使用して、ファイルを他のサーバーに送信します。この方法は機能するはずですが、別の方法について説明します。

こんな感じになると思います。

$Source = "\\idmststtrm2\c$\app\Oracle\product\11.2.0\dbhome_1\network\admin\tns_admin$\tnsnames.ora"
$Target="\\bts13r2b\c$\app\Oracle\product\11.2.0\dbhome_1\network\admin\tnsnames"
Get-ChildItem -Path $Source | Copy-Item -Destination $Target -Force

別のオプションは、両方の共有ディレクトリに対して最初に書き込みアクセスがあることを確認することです。それが確認されたら、以下を実行します。

$Source="\\idmststtrm2\tns_admin$\tnsnames.ora"
$Target="\\bts13r2b\tnsnames"
Get-ChildItem -Path $Source | Copy-Item -Destination $Target -Force
#(Get-Acl $Source).Access #Verify $Source Access
#(Get-Acl $Target).Access #Verify $Target Access

これが機能するかどうかをお知らせください。

1
Zach Olinske

私はこれが古いことを知っていますが、Copy-Itemを使用して.ps1を呼び出し、同じ "パスへのアクセスが拒否されました... "エラー。リモート共有のアクセス許可(共有アクセス許可とNTFSアクセス許可の両方)を確認して再確認しました。それは私のログインで正常に実行され、Adminログインで正常に実行されました。

最後に、にやにや笑うために、共有のアクセス許可を「すべてのユーザー」から「全員」に変更しました。したがって、GMSAアカウントは「すべてのユーザー」の一部ではないようです。想像もしなかったでしょう!

うまくいけば、これは誰かに10時間の無駄な労力を節約してくれることを願っています...

1
escott

管理者としてpowershellを開いてみてください。この問題が発生する場合があります

1
jaismeensandhu