PowerShell : 다른 사용자 이름/비밀번호로 네트워크 드라이브를 매핑하는 방법

StackOverflow https://stackoverflow.com/questions/1530733

문제

배경: 로컬 컴퓨터에서 다음 PowerShell 스크립트를 사용하여 일부 네트워크 드라이브를 자동으로 매핑한다고 가정합니다.

$net = $(New-Object -ComObject WScript.Network);
$net.MapNetworkDrive("p:", "\\papabox\files");

$net = $(New-Object -ComObject WScript.Network);
$net.MapNetworkDrive("q:", "\\quebecbox\files");

## problem -- this one does not work because my username/password
## is different on romeobox
$net = $(New-Object -ComObject WScript.Network);
$net.MapNetworkDrive("r:", "\\romeobox\files");

의문: Romeobox의 내 사용자 이름/비밀번호와 다른 두 상자와 다르더라도 Romeobox에 연결할 수 있도록 스크립트를 어떻게 수정합니까?

도움이 되었습니까?

해결책

$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("r:", "\\romeobox\files", $false, "domain\user", "password")

트릭을 수행해야합니다.

친절,

다른 팁

비밀번호를 스크립트 나 데이터 파일에 일반 텍스트에 넣지 않고 비밀번호를 저장하는 방법이 필요한 경우 DPAPI를 사용하여 비밀번호를 보호하여 파일에 안전하게 저장하고 나중에 일반 텍스트로 검색 할 수 있습니다.

# Stick password into DPAPI storage once - accessible only by current user
Add-Type -assembly System.Security
$passwordBytes = [System.Text.Encoding]::Unicode.GetBytes("Open Sesame")
$entropy = [byte[]](1,2,3,4,5)
$encrytpedData = [System.Security.Cryptography.ProtectedData]::Protect( `
                       $passwordBytes, $entropy, 'CurrentUser')
$encrytpedData | Set-Content -enc byte .\password.bin

# Retrieve and decrypted password
$encrytpedData = Get-Content -enc byte .\password.bin
$unencrytpedData = [System.Security.Cryptography.ProtectedData]::Unprotect( `
                       $encrytpedData, $entropy, 'CurrentUser')
$password = [System.Text.Encoding]::Unicode.GetString($unencrytpedData)
$password

PowerShell을 사용하여 드라이브를 맵핑하는 방법을 찾고 있습니까?

PowerShell3.0에는 더 간단한 방법이 있습니다. New-PSDrive The로 업데이트되었습니다 -persist 옵션. 예를 들어

New-PSDrive -Name U -PSProvider FileSystem -Root \\yourserver\your\folder -Credential yourdomain\username -Persist

과거에, New-PSDrive 현재 PowerShell 세션에만 영향을 미쳤습니다. -persist 매핑이 O/S와 같이 등록됩니다. 보다 NEW-PSDRIVE

원래 질문에 답하기 위해 사용 된 자격 증명을 변경할 수 있습니다. 사용 -Credential 도메인 username을 변경하면 Windows가 암호를 자랑합니다. 또 다른 대안은 아래 예제에서와 같이 pscredential 객체를 전달하는 것입니다. 보다 점수를 얻습니다 자세한 내용은.

PS C:\> $User = "mydomain\username"
PS C:\> $PWord = ConvertTo-SecureString -String "mypassword" -AsPlainText -Force
PS C:\> $Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $PWord
PS C:\> New-PSDrive -Name U -PSProvider FileSystem -Root \\domain\some\folder -Credential $Credential -Persist  
$User = "user"
$PWord = ConvertTo-SecureString -String "password" -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $PWord
$net = $(New-Object -ComObject WScript.Network)
$net.MapNetworkDrive("r:", "\\server\share")

나는이 쉬운 하나의 라이너가 내 사건에서 작동한다는 것을 알았다 (작은 "상자에서"생각;))

(시작 프로세스 -FilePath "C : Windows System32 net.exe" -ArgumentList "사용 i : server volume /User : xxxxx 비밀번호 /persistent : 예 " -Wait -Passthru) .exitCode

그리고 추가 보너스로서, 당신은보고 할 좋은 종료 코드를 얻습니다. 도움이되기를 바랍니다.

내 워크 스테이션에서

$net.MapNetworkDrive("k", "\\romeobox\files", $false, "domain\username", "password")

나에게 오류를 보냈다 :

Exception Lors de l 'Appel de«mapnetworkdrive»avec«5»인수 :«nom de périph érique local déjà utilisé.

흥미롭게도, 그것은 K : 이미 사용되었지만 "::"에서 나온 사실에서 나온 것은 아닙니다. 내 워크 스테이션에서 작동하는 내용은 다음과 같습니다.

$net.MapNetworkDrive::("k", "\\romeobox\files", $false, "domain\username", "password")
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top