powershell v2 の CTP を使用しています。dmz のさまざまなネットワーク共有に移動していくつかのファイルをコピーする必要があるスクリプトを作成しました。ただし、私が抱えている問題は、copy-item、test-pathなどのpowershellのコマンドレットが代替資格情報をサポートしていないことは明らかです...
誰でも私の仕事を達成するための最善の方法について提案があります..?
powershell v2 の CTP を使用しています。dmz のさまざまなネットワーク共有に移動していくつかのファイルをコピーする必要があるスクリプトを作成しました。ただし、私が抱えている問題は、copy-item、test-pathなどのpowershellのコマンドレットが代替資格情報をサポートしていないことは明らかです...
誰でも私の仕事を達成するための最善の方法について提案があります..?
私は最近これに遭遇しました.Powershellの最新バージョンには、新しいBitsTransfer Moduleがあり、 BITSを使用したファイル転送を許可し、 -Credential パラメータの使用をサポートしています.
次のサンプルは、BitsTransfer モジュールを使用して、指定された PSCredential オブジェクトを使用してネットワーク共有からローカル コンピューターにファイルをコピーする方法を示しています。
Import-Module bitstransfer
$cred = Get-Credential
$sourcePath = \\server\example\file.txt
$destPath = C:\Local\Destination\
Start-BitsTransfer -Source $sourcePath -Destination $destPath -Credential $cred
これを処理する別の方法は、標準の「net use」コマンドを使用することです。ただし、このコマンドは「securestring」パスワードをサポートしていないため、資格情報オブジェクトを取得した後、復号化されたバージョンのパスワードを取得して「net use」コマンドに渡す必要があります。
$cred = Get-Credential
$networkCred = $cred.GetNetworkCredential()
net use \\server\example\ $networkCred.Password /USER:$networkCred.UserName
Copy-Item \\server\example\file.txt C:\Local\Destination\
PowerShell は多くのコマンドレットを介した "-Credential" の使用をサポートしていないため (非常に煩わしい)、WMI を介したネットワーク ドライブのマッピングは PS では非常に信頼性が低いことが判明したため、net use コマンドを介してユーザー資格情報を事前にキャッシュして、非常にうまく機能します:
# cache credentials for our network path
net use \\server\C$ $password /USER:$username
パスで \\server\C$ を使用するすべての操作は、*-item コマンドレットを使用して機能するようです。
完了したら、共有を削除することもできます。
net use \\server\C$ /delete
PowerShell 3.0 は、FileSystem プロバイダーの資格情報をサポートするようになりました。別の資格情報を使用するには、New-PSDrive コマンドレットで Credential パラメーターを使用するだけです。
PS > New-PSDrive -Name J -PSProvider FileSystem -Root \\server001\sharename -Credential mydomain\travisj -Persist
このコマンドの後、新しく作成されたドライブにアクセスし、通常のドライブのようにファイルのコピーや移動などの他の操作を実行できます。完全な解決策は次のとおりです。
$Source = "C:\Downloads\myfile.txt"
$Dest = "\\10.149.12.162\c$\skumar"
$Username = "administrator"
$Password = ConvertTo-SecureString "Complex_Passw0rd" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential($Username, $Password)
New-PSDrive -Name J -PSProvider FileSystem -Root $Dest -Credential $mycreds -Persist
Copy-Item -Path $Source -Destination "J:\myfile.txt"
これは古い質問ですが、将来のファインダーのために更新しています。
PowerShell v3 では、ファイル システム操作で -Credential パラメーターの使用がサポートされるようになりました。
これが同じ解決策を探している他の人に役立つことを願っています。
ドライブをリモート システムにマップし (「net use」または WshNetwork.MapNetworkDrive を使用。どちらの方法でも資格情報がサポートされます)、copy-item を使用します。
PowerShell 3 はすぐに使用できることを知っていますが、記録として、PowerShell 2 に行き詰まっている場合は、基本的にレガシーnet use
コマンド (他のいくつかの提案による) を使用するか、Impersonation モジュールを使用する必要があります。特にこれに対処するためにしばらく前に書いた。
これは誰かがそれを機能させた投稿です。レジストリの変更が必要なようです。
これを再び死からよみがえらせる。.ps1 をバッチ ファイルにラップし、Win7 の Shift + r.Click RunAs を実行することで、同様の資格情報の問題を回避しました。必要に応じて、次のように PsExec を使用することもできます。
psexec.exe /accepteula /h /u user /p pwd cmd /c "echo. | powershell.exe -File script.ps1"
この質問は、powershell でネットワーク共有を使用するのに役立つ可能性がある非常に関連する問題に対処します。
PowerShell の新しいバージョンはこれを処理し、MS ドキュメントには、ここで異なる資格情報を使用してファイルをコピーする素晴らしい例があります
$Session = New-PSSession -ComputerName "Server02" -Credential "Contoso\User01"
Copy-Item "D:\Folder002\" -Destination "C:\Folder002_Copy\" -ToSession $Session
明らかに、copy-item、test-path などの powershell のコマンドレットは代替資格情報をサポートしていません...
ここにあるように見えますが、copy-item には確かに -Credential パラメーターが含まれています。
PS C:\> gcm -syn コピー項目 Copy-Item [-Path] <String[]> [[-Destination] <String>] [-Container] [-Force] [-Filter <String>] [-I nclude <String[]>] [-Exclude <String[]>] [-Recurse] [-PassThru] [-Credential <PSCredential>] [...]
必要な資格情報を -Credential パラメーターに渡すことができるはずです。次のようなものです:
$cred = 資格情報の取得
[資格情報を入力してください]
コピー項目 -Path $from -Destination $to -Credential $cred