定期的に(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.
この問題は、ネットワーク共有への書き込み権限が原因です。共有のアクセス許可は正しく設定されていましたが、NTFSアクセス許可がありませんでした。システム管理者は、アカウントがフォルダに書き込むことができるようにするために、両方の権限セットを確実にする必要があります。これが正しく更新されると、スクリプトはネットワーク共有へのコピーを実行できました。
あなたは正しい考えを持っていますが、「管理共有」を使用して他のシステムにアクセスしようとするとどうなるでしょうか。
いくつかの標準変数を作成しました:$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
これが機能するかどうかをお知らせください。
私はこれが古いことを知っていますが、Copy-Itemを使用して.ps1を呼び出し、同じ "パスへのアクセスが拒否されました... "エラー。リモート共有のアクセス許可(共有アクセス許可とNTFSアクセス許可の両方)を確認して再確認しました。それは私のログインで正常に実行され、Adminログインで正常に実行されました。
最後に、にやにや笑うために、共有のアクセス許可を「すべてのユーザー」から「全員」に変更しました。したがって、GMSAアカウントは「すべてのユーザー」の一部ではないようです。想像もしなかったでしょう!
うまくいけば、これは誰かに10時間の無駄な労力を節約してくれることを願っています...
管理者としてpowershellを開いてみてください。この問題が発生する場合があります