programing

copy-item With Alternate Credentials

goodsources 2023. 9. 18. 21:19
반응형

copy-item With Alternate Credentials

I'm using the CTP of powershell v2. I have a script written that needs to go out to various network shares in our dmz and copy some files. However, the issue I have is that evidently powershell's cmdlets such as copy-item, test-path, etc do not support alternate credentials...

Anyone have a suggestion on how best to accomplish my task..?

I have encountered this recently, and in the most recent versions of Powershell there is a new BitsTransfer Module, which allows file transfers using BITS, and supports the use of the -Credential parameter.

The following sample shows how to use the BitsTransfer module to copy a file from a network share to a local machine, using a specified PSCredential object.

Import-Module bitstransfer
$cred = Get-Credential
$sourcePath = \\server\example\file.txt
$destPath = C:\Local\Destination\
Start-BitsTransfer -Source $sourcePath -Destination $destPath -Credential $cred

Another way to handle this is using the standard "net use" command. This command, however, does not support a "securestring" password, so after obtaining the credential object, you have to get a decrypted version of the password to pass to the "net use" command.

$cred = Get-Credential
$networkCred = $cred.GetNetworkCredential()
net use \\server\example\ $networkCred.Password /USER:$networkCred.UserName
Copy-Item \\server\example\file.txt C:\Local\Destination\

Since PowerShell doesn't support "-Credential" usage via many of the cmdlets (very annoying), and mapping a network drive via WMI proved to be very unreliable in PS, I found pre-caching the user credentials via a net use command to work quite well:

# cache credentials for our network path
net use \\server\C$ $password /USER:$username

Any operation that uses \\server\C$ in the path seems to work using the *-item cmdlets.

You can also delete the share when you're done:

net use \\server\C$ /delete

PowerShell 3.0 now supports for credentials on the FileSystem provider. To use alternate credentials, simply use the Credential parameter on the New-PSDrive cmdlet

PS > New-PSDrive -Name J -PSProvider FileSystem -Root \\server001\sharename -Credential mydomain\travisj -Persist

After this command you can now access the newly created drive and do other operations including copy or move files like normal drive. here is the full solution:

$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"

This is an old question but I'm just updating it for future finders.

PowerShell v3 now supports using the -Credential parameter for filesystem operations.

Hope this helps others searching for the same solution.

I would try to map a drive to the remote system (using 'net use' or WshNetwork.MapNetworkDrive, both methods support credentials) and then use copy-item.

지금은 PowerShell 3에서 이 기능을 즉시 지원한다는 것을 알고 있습니다. 하지만 공식적으로 말하자면, PowerShell 2를 사용하지 않을 경우 기본적으로 레거시를 사용해야 합니다.net use명령(여러 다른 사람들이 제안한 대로) 또는 이 문제를 해결하기 위해 제가 얼마 전에 작성한 모창 모듈입니다.

다음은 컴퓨터에서 LocalSystem으로 실행되지만 네트워크 파일 위치에 액세스하려면 domaim 사용자의 자격 증명이 필요한 스크립트입니다.이를 통해 사용자의 암호를 "안전한" 암호화된 파일에 저장할 수 있습니다. 이 파일은 해당 파일을 작성한 사용자만 읽을 수 있습니다.

암호 설정 및 변경은 일반 텍스트 암호가 포함된 파일을 기계에 복사하여 수행합니다.다음에 스크립트를 실행하면 암호를 읽고 암호화한 다음 일반 텍스트 암호를 삭제합니다.

$plaintext_password_file = 'C:\plaintext.txt' # Stores the password in plain text - only used once, then deleted
$encryted_password_file = 'C:\copy_pass.txt'  # Stores the password in "safe" encrypted form - used for subsequent runs of the script
                                              #   - can only be decrypted by the windows user that wrote it
$file_copy_user = 'OURDOMAIN\A_User'

# Check to see if there is a new plaintext password
if (Test-Path $plaintext_password_file)
{
    # Read in plaintext password, convert to a secure-string, convert to an encrypted-string, and write out, for use later
    get-content $plaintext_password_file | convertto-securestring -asplaintext -force | convertfrom-securestring | out-file $encryted_password_file
    # Now we have encrypted password, remove plain text for safety
    Remove-Item $plaintext_password_file
}


# Read in the encrypted password, convert to a secure-string
$pass = get-content $encryted_password_file | convertto-securestring

# create a credential object for the other user, using username and password stored in secure-string
$credentials = new-object -typename System.Management.Automation.PSCredential -argumentlist $file_copy_user,$pass

# Connect to network file location as the other user and map to drive J:
New-PSDrive -Name J -PSProvider FileSystem -Root "\\network\file_directory" -Credential $credentials

# Copy the file to J:
Copy-Item -Force -Verbose -Path "C:\a_file.txt" -Destination "J:\"

추가적인 개선 사항으로:사용자 이름은 하드 코딩이 아닌 암호화될 수도 있습니다.

새로운 버전의 PowerShell은 이를 처리하며 MS Documentation은 여기에 다른 자격 증명을 가진 파일을 복사하는 좋은 예를 가지고 있습니다.

$Session = New-PSSession -ComputerName "Server02" -Credential "Contoso\User01"
Copy-Item "D:\Folder002\" -Destination "C:\Folder002_Copy\" -ToSession $Session

여기 누군가가 작동시킨 게시물이 있습니다.레지스트리 변경이 필요해 보입니다.

질문파워셸에서 네트워크 공유를 사용하는 데 도움이 될 수 있는 매우 관련된 문제를 다루고 있습니다.

죽은 자들에게서 이걸 다시 가져오는 것.저는 .ps1을 배치 파일로 포장하고 Win7, Shift + r을 수행하여 유사한 자격 증명 문제를 해결했습니다.[다른 이름으로 실행]을 누릅니다.원하는 경우 PsExec을 사용할 수도 있습니다.

psexec.exe /accepteula /h /u user /p pwd cmd /c "echo. | powershell.exe -File script.ps1"

copy-item, test-path 등의 powershell의 cmdlet이 대체 자격 증명을 지원하지 않는 것이 명백합니다.

복사 항목에 자격 증명 매개 변수가 포함되어 있습니다.

PSC:\> gcm-syn 복사-항목
복사-항목 [-Path] <String[]> [-Destination] <String>] [-Container] [-Force] [-Filter <String>] [-I포함 <String[]> [- 제외 <String[]]] [-Recurse] [-PassThru] [-Credential <PSCredential>] [...]

원하는 자격 증명을 -Credential 매개 변수에 전달할 수 있어야 합니다.그래서 다음과 같습니다.

$208 = 자격 증명 취득

[자격 증명 입력]

Copy-Item -Path $from -Destination $to -Credential $credential $credential

언급URL : https://stackoverflow.com/questions/612015/copy-item-with-alternate-credentials

반응형