Copy-Item из UN C путь, расположенный в другом домене - PullRequest
1 голос
/ 26 марта 2020

Мне было дано задание установить программное обеспечение (msi) на серверы (2008,2012,2016), которые разбросаны по нескольким доменам. Хитрость заключается в том, чтобы скопировать установочные файлы конфигурации из UN C, расположенного в другом домене, на каждый сервер локально. Разные версии PowerShell ведут себя по-разному. Первоначально на Server 2016 я попытался New-PSSession и -FromSession переключиться, чтобы установить sh соединение с сервером (успешно), который имел путь UN C, и скопировать так :

$creds = Get-Credential -Username "<domain_with_unc_share>\$($env:username)"
$unc_server_session = New-PSSession -ComputerName unc_server -Credential $creds
Copy-Item "d:\share\*.*" -Destination "c:\temp\" -FromSession $unc_server_session -Recurse

-FromSession Коммутатор был представлен с PS5 и хорошо работает с Sevrer 2016, но все, что ниже, и это не удается. Это явно не работает для Windows 2008/2012.

Затем я попытался использовать только UN C в Copy-Item следующим образом:

$creds = Get-Credential -Username "<domain_with_unc_share>\$($env:username)"
Copy-Item "\\unc_server\share\*.*" -Destination "c:\temp\" -Credential $creds -Recurse

Это дает мне ошибка, связанная с тем, что переключатель -Credential не может использоваться с Copy-Item и откладывает использование New-PSDrive

Copy-Item : Cannot retrieve the dynamic parameters for the cmdlet. The FileSystem provider supports credentials only
on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.
At line:1 char:1
+ Copy-Item "\\unc_server\share\ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Copy-Item], ParameterBindingException
    + FullyQualifiedErrorId : GetDynamicParametersException,Microsoft.PowerShell.Commands.CopyItemCommand

Затем я попытался следующее:

$creds = Get-Credential -Username "<domain_with_unc_share>\$($env:username)"
New-PSDrive -Name Y -PSProvider filesystem -Root "\\unc_server\share" -Credential $creds
Copy-Item "Y:\*.*" -Destination "c:\temp\" -Recurse

Все еще не доволен, он говорит мне, что мой путь ООН C не существует:

New-PSDrive : The specified drive root "\\unc_server\share"
either does not exist, or it is not a folder.
At line:1 char:1
+ New-PSDrive -Name "Y" -PSProvider filesystem -Root "\\unc_server\share ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ReadError: (Y:PSDriveInfo) [New-PSDrive], IOException
    + FullyQualifiedErrorId : DriveRootError,Microsoft.PowerShell.Commands.NewPSDriveCommand

Я теряюсь в том, как умиротворить Бога PowerShell так что работает на PS3,4,5. Есть предложения?

1 Ответ

1 голос
/ 26 марта 2020

Вы должны использовать ключ -Persist, чтобы указать, что вы подключаете сетевой диск:

$creds = Get-Credential -Username "<domain_with_unc_share>\$($env:username)" 
New-PSDrive -Name Y -PSProvider filesystem -Root "\\unc_server\share" -Credential $creds -Persist
 Copy-Item "Y:\*.*" -Destination "c:\temp\" -Recurse
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...