Поиск по этому блогу

среда, 14 декабря 2011 г.

Использование командлетов под другой учетной записью


В командлетах Test-Path, Copy-Item и т.п. есть параметр Credential. Из справки:

-Credential <PSCredential>
Задает учетную запись пользователя, который располагает разрешением для выполнения этого действия. По умолчанию используется значение "Текущий пользователь".

Введите имя пользователя, например "User01" или "Domain01\User01". Или укажите объект PSCredential, например один из объектов, созданных командлетом Get-Credential. При вводе имени пользователя система запросит пароль.

Все бы хорошо, но дальше написано:

Этот параметр не поддерживается ни одним из установленных с Windows PowerShell поставщиком.

Однако бывает нужно получить доступ к файлам на  сетевых  ресурсах под учетной записью, отличной от текущей. Для этого можно сначала подключить сетевой ресурс  под правами этой учетки, выполнить необходимые действия и отключить его:

$cred = Get-Credential domain\admin
$user = $cred.get_UserName()
$pass = $cred.GetNetworkCredential().Password

$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("u:", "\\server\example\", $false, $user, $pass)
Copy-Item c:\1111.txt \\server\example\
Test-Path \\server\example\1111.txt
$net.RemoveNetworkDrive("u:")

# или

net use \\server\example\ $pass /USER:$user
Copy-Item \\server\example\1111.txt C:\Local\Destination\
net use \\server\example /delete