PowerShell : 다른 사용자 이름/비밀번호로 네트워크 드라이브를 매핑하는 방법
-
20-09-2019 - |
문제
배경: 로컬 컴퓨터에서 다음 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")