Копия PowerShell DSC из общего сетевого ресурса
Я пытаюсь использовать PowerShell DSC для копирования содержимого папки из общего сетевого ресурса. Вот код:
Configuration TestSetup {
Node localhost {
File Test {
SourcePath = "\\Server\SomeShare\SomeFolder"
DestinationPath = "E:\test"
Recurse = $true
Type = "Directory"
}
}
}
Это не работает, однако - когда я запускаю его, я получаю следующее сообщение об ошибке:
The related file/directory is: \\Server\SomeShare\SomeFolder.
The path cannot point to the root directory or to the root of a net share.
SourcePath must be specified if you want to configure the destination directory recursively. Make sure that SourcePath is a directory and that it is accessible.
+ CategoryInfo : InvalidArgument: (:) [], CimException
+ FullyQualifiedErrorId : MI RESULT 4
+ PSComputerName : localhost
The SendConfigurationApply function did not succeed.
+ CategoryInfo : InvalidArgument: (root/Microsoft/...gurationManager:String) [], CimException
+ FullyQualifiedErrorId : MI RESULT 4
+ PSComputerName : localhost
Я получаю аналогичные результаты при попытке установить пакет из общей сетевой папки или извлечь архив из общей сетевой папки. Я использую PowerShell 4 на Windows Server 2008 R2 SP1.
Есть ли способ использовать PowerShell DSC с сетевыми ресурсами?
4 ответа
Диспетчер локальной конфигурации DSC работает как локальная учетная запись SYSTEM, а не как учетная запись пользователя. Поэтому он не сможет получить доступ к сетевым ресурсам, если ему не предоставлены явные разрешения.
Есть две возможные ситуации. Либо общий ресурс находится на том же компьютере, к которому применяется конфигурация DSC (назовем этот компьютер A), либо общий ресурс находится на другом компьютере (назовем этот компьютер B).
Если общий ресурс находится на компьютере A, разрешения на чтение должны быть предоставлены пользователю SYSTEM. Например:
net share SomeShare=C:\SomeShare /GRANT:"NT AUTHORITY\SYSTEM",READ
Если общий ресурс находится на компьютере B, необходимо предоставить разрешения на чтение учетной записи компьютера на компьютере A. Например:
net share SomeShare=C:\SomeShare /GRANT:DOMAIN\MachineA$,READ
DSC
работает на localhost
для того, чтобы применить конфигурацию. Это означает, что DSC
Файлы ресурсов должны быть распределены на каждую машину, которая должна быть настроена через DSC
,
Поэтому управление копиями имеет решающее значение при копировании файлов DSC из общего ресурса.
DSC
работает под NT AUTHORITY\SYSTEM
счет и если Credential
атрибут был установлен, Computer account
используется при извлечении файлов из общего сетевого ресурса.
Поэтому и в зависимости от того, откуда файлы извлекаются, SYSTEM
необходимо предоставить аккаунт read
разрешения на локальную долю и Computer account
должны быть предоставлены read
разрешения на удаленный общий ресурс.
Это подробно описано в ответе Ричардса, который расширяет синтаксис исходного источника блога для этой информации.
Сейчас у меня нет времени на дальнейшее изучение этого вопроса, но похоже, что можно безопасно передавать учетные данные для использования Local Configuration Manager. Фактически, в публикации блога его пример использует ресурс File для извлечения файлов из общего сетевого ресурса. Я надеюсь попробовать это в ближайшее время, а затем вернуться, чтобы лучше конкретизировать этот ответ.
Блог TechNet. Хотите защитить учетные данные в конфигурации Windows PowerShell Desired State? - Трэвис Планк
Powershell почти такой же тупой, как старая оболочка cmd. У него все еще очень ограниченная поддержка путей UNC. Имея это в виду... Вы пытались навязать путь UNC? т.е.
New-PSDrive -Name UNCPath -PSProvider FileSystem -Root \\Server\SomeShare\
А затем обратиться к пути как UNCPath:\SomeFolder
, Очистка с Remove-PSDrive
когда вы закончите.
Также иногда можно указать FileSystem::\\Server\SomeShare\SomeFolder
как путь. Я видел случаи, когда это не работает... но оно того стоит.