Я пытаюсь использовать 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 с общими сетевыми ресурсами?
Диспетчер локальной конфигурации DSC запускается как локальная учетная запись SYSTEM, а не как ваша учетная запись пользователя. Поэтому он не сможет получить доступ к сетевым ресурсам, если ему не предоставлены явные разрешения.
Возможны две ситуации. Либо общий ресурс находится на том же компьютере, к которому применяется конфигурация DSC (назовем этот компьютер A), либо общий ресурс находится на другом компьютере (назовем этот компьютер B).
Если общий ресурс находится на компьютере A, пользователю SYSTEM необходимо предоставить разрешения READ. Например:
net share SomeShare=C:\SomeShare /GRANT:"NT AUTHORITY\SYSTEM",READ
Если общий ресурс находится на машине B, разрешения READ необходимо предоставить учетной записи компьютера машины 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? - Трэвис Планк
Powershell почти такой же тупой, как и старая оболочка cmd. Он по-прежнему имеет очень ограниченную поддержку путей UNC. Имея это в виду ... вы пробовали использовать псевдоним UNC-пути? т.е.
New-PSDrive -Name UNCPath -PSProvider FileSystem -Root \\Server\SomeShare\
А затем назовите путь UNCPath:\SomeFolder
. Очистка с помощью Remove-PSDrive
когда вы закончите.
Также иногда можно указать FileSystem::\\Server\SomeShare\SomeFolder
как путь. Я видел случаи, когда это не работало ... но попробовать стоит.