サーバーAから実行するPowerShellスクリプトを作成しています。サーバーBに接続し、バックアップとしてサーバーAにファイルをコピーします。
それができない場合、サーバーAからサーバーBに接続し、サーバーBの別のディレクトリにファイルをコピーしたいと思います。
Copy-Item
コマンドが表示されますが、コンピューター名を付ける方法が表示されません。
私は次のようなことができると思っていただろう
Copy-Item -ComputerName ServerB -Path C:\Programs\temp\test.txt -Destination (not sure how it would know to use ServerB or ServerA)
これどうやってするの?
管理共有を使用して、システム間でファイルをコピーするだけです。この方法ははるかに簡単です。
Copy-Item -Path \\serverb\c$\programs\temp\test.txt -Destination \\servera\c$\programs\temp\test.txt;
ローカルファイルシステムパスの代わりにUNCパスを使用することにより、これらのUNCパスにアクセスできるクライアントシステムからスクリプトを実行できるようになります。ローカルファイルシステムパスを使用している場合、特定のコンピューターでスクリプトを実行することになります。
これは、両方の管理共有に対する権限を持つユーザーの下でPowerShellセッションが実行される場合にのみ機能します。
サーバーBで通常のネットワーク共有を使用し、全員に読み取り専用でアクセスし、(サーバーAから)単に呼び出すことをお勧めします。
Copy-Item -Path "\\\ServerB\SharedPathToSourceFile" -Destination "$Env:USERPROFILE" -Force -PassThru -Verbose
PowerShellバージョン5以降(Windows Server 2016に含まれる 以前のバージョンのWMF 5の一部としてダウンロード可能 )、これはリモーティングで可能です。この利点は、何らかの理由で共有にアクセスできない場合でも機能することです。
これが機能するには、コピーが開始されるローカルセッションにPowerShell 5以降がインストールされている必要があります。リモートセッションは、PowerShell 5をインストールする必要がありますではありません。最低2のPowerShellバージョンと最低2008 R2のWindows Serverバージョンで動作します。[1]
サーバーAから、サーバーBへのセッションを作成します。
$b = New-PSSession B
そして、まだAから:
Copy-Item -FromSession $b C:\Programs\temp\test.txt -Destination C:\Programs\temp\test.txt
アイテムをBにコピーするには、-ToSession
を使用します。どちらの場合もローカルパスが使用されることに注意してください。使用しているサーバーを追跡する必要があります。
[1]:PowerShell 2のみを備えたリモートサーバーとの間でコピーを行う場合、 PowerShell 5.1のこのバグ に注意してください。これは、執筆時点では-ToSession
では動作しません-FromSession
では、明らかにコピーはまったく機能しません。
Net Use
またはNew-PSDrive
を使用して、新しいドライブを作成します。
New-PsDrive: PowerShell環境でのみ表示される新しいPsDriveを作成します。
New-PSDrive -Name Y -PSProvider filesystem -Root \\ServerName\Share
Copy-Item BigFile Y:\BigFileCopy
Net Use: OSのすべての部分に表示される新しいドライブを作成します。
Net Use y: \\ServerName\Share
Copy-Item BigFile Y:\BigFileCopy
リモートファイルにアクセスするために資格情報が必要な場合に備えて、コマンドレットを使用してSystem.Net.WebClientオブジェクトを生成できますNew-Object to "Copy File Remotely"、そのようです
$Source = "\\192.168.x.x\somefile.txt"
$Dest = "C:\Users\user\somefile.txt"
$Username = "username"
$Password = "password"
$WebClient = New-Object System.Net.WebClient
$WebClient.Credentials = New-Object System.Net.NetworkCredential($Username, $Password)
$WebClient.DownloadFile($Source, $Dest)
または、ファイルをアップロードする必要がある場合は、UploadFileを使用できます。
$Dest = "\\192.168.x.x\somefile.txt"
$Source = "C:\Users\user\somefile.txt"
$WebClient.UploadFile($Dest, $Source)
なし上記の回答のうち、私にとってはうまくいきました。私はこのエラーを受け取り続けました:
Copy-Item : Access is denied
+ CategoryInfo : PermissionDenied: (\\192.168.1.100\Shared\test.txt:String) [Copy-Item], UnauthorizedAccessException>
+ FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.CopyItemCommand
thisは私のためにそれをしました:
netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=yes
次に、[ホスト]から[実行]ボックスにある私のマシンで、これを実行しました。
\\{IP address of nanoserver}\C$