40

powershell v2 の CTP を使用しています。dmz のさまざまなネットワーク共有に移動していくつかのファイルをコピーする必要があるスクリプトを作成しました。ただし、私が抱えている問題は、copy-item、test-pathなどのpowershellのコマンドレットが代替資格情報をサポートしていないことは明らかです...

誰でも私の仕事を達成するための最善の方法について提案があります..?

4

13 に答える 13

45

私は最近これに遭遇しました.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\
于 2011-03-23T17:05:53.970 に答える
34

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
于 2010-02-16T23:13:24.730 に答える
23

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"
于 2015-06-03T03:28:37.807 に答える
9

これは古い質問ですが、将来のファインダーのために更新しています。

PowerShell v3 では、ファイル システム操作で -Credential パラメーターの使用がサポートされるようになりました。

これが同じ解決策を探している他の人に役立つことを願っています。

于 2012-05-03T17:57:26.973 に答える
6

ドライブをリモート システムにマップし (「net use」または WshNetwork.MapNetworkDrive を使用。どちらの方法でも資格情報がサポートされます)、copy-item を使用します。

于 2009-03-05T10:23:48.203 に答える
2

PowerShell 3 はすぐに使用できることを知っていますが、記録として、PowerShell 2 に行き詰まっている場合は、基本的にレガシーnet useコマンド (他のいくつかの提案による) を使用するか、Impersonation モジュールを使用する必要があります。特にこれに対処するためにしばらく前に書いた。

于 2012-09-25T15:56:44.067 に答える
0

これは誰かがそれを機能させた投稿です。レジストリの変更が必要なようです。

于 2009-03-04T19:42:44.340 に答える
0

これを再び死からよみがえらせる。.ps1 をバッチ ファイルにラップし、Win7 の Shift + r.Click RunAs を実行することで、同様の資格情報の問題を回避しました。必要に応じて、次のように PsExec を使用することもできます。

psexec.exe /accepteula /h /u user /p pwd cmd /c "echo. | powershell.exe -File script.ps1"
于 2012-11-23T04:22:46.953 に答える
0

この質問は、powershell でネットワーク共有を使用するのに役立つ可能性がある非常に関連する問題に対処します。

于 2009-03-11T00:33:58.147 に答える
0

PowerShell の新しいバージョンはこれを処理し、MS ドキュメントには、ここで異なる資格情報を使用してファイルをコピーする素晴らしい例があります

$Session = New-PSSession -ComputerName "Server02" -Credential "Contoso\User01"
Copy-Item "D:\Folder002\" -Destination "C:\Folder002_Copy\" -ToSession $Session
于 2021-01-27T19:56:16.380 に答える
-1

明らかに、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>] [...]
于 2009-03-04T19:23:12.797 に答える
-6

必要な資格情報を -Credential パラメーターに渡すことができるはずです。次のようなものです:

$cred = 資格情報の取得

[資格情報を入力してください]

コピー項目 -Path $from -Destination $to -Credential $cred

于 2009-03-04T19:23:52.623 に答える