Копия PowerShell DSC из общего сетевого ресурса

17

Я пытаюсь использовать 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 с сетевыми ресурсами?

Ричард
источник
Разве решение не описано в этой ссылке? powershellmagazine.com/2013/09/02/…
ErikE
Спасибо, что указал мне правильное направление. Это не совсем помогло мне, потому что общий ресурс был на том же компьютере, и поэтому мне пришлось предоставить разрешения учетной записи SYSTEM. Если вы хотите указать ответ, указав на эту ссылку, я назначу вам награду.
Ричард

Ответы:

14

Диспетчер локальной конфигурации 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

Источник: http://www.powershellmagazine.com/2013/09/02/copying-powershell-modules-and-custom-dsc-resources-using-dsc/

Ричард
источник
5

В DSCпробеги на localhostдля того , чтобы применить конфигурацию. Это означает, что DSCфайлы ресурсов должны быть распределены на каждую машину, через которую необходимо выполнить настройку DSC.

Поэтому управление копиями имеет решающее значение при копировании файлов DSC из общего ресурса.

DSCзапускается под NT AUTHORITY\SYSTEMучетной записью и, если Credentialатрибут не был установлен, Computer accountиспользуется при извлечении файлов из общего сетевого ресурса.

Поэтому и в зависимости от того, откуда файлы извлекаются, SYSTEMучетной записи должны быть предоставлены readразрешения для локального общего ресурса и Computer accountдолжны быть предоставлены readразрешения для удаленного общего ресурса.

Это подробно описано в ответе Ричардса, который расширяет синтаксис исходного источника блога для этой информации.

ErikE
источник
0

Сейчас у меня нет времени на дальнейшее изучение этого вопроса, но похоже, что можно безопасно передавать учетные данные для использования Local Configuration Manager. Фактически, в публикации блога его пример использует ресурс File для извлечения файлов из общего сетевого ресурса. Я надеюсь попробовать это в ближайшее время, а затем вернуться, чтобы лучше конкретизировать этот ответ.

Блог TechNet. Хотите защитить учетные данные в конфигурации Windows PowerShell Desired State? - Трэвис Планк

Натан Хартли
источник
-2

Powershell почти такой же тупой, как старая оболочка cmd. У него все еще очень ограниченная поддержка путей UNC. Имея это в виду ... Вы пытались навязать путь UNC? т.е.

New-PSDrive -Name UNCPath -PSProvider FileSystem -Root \\Server\SomeShare\

А затем обратитесь к пути как UNCPath:\SomeFolder. Очистить, Remove-PSDriveкогда вы закончите.

Также иногда вы можете указать FileSystem::\\Server\SomeShare\SomeFolderв качестве пути. Я видел случаи, когда это не работает ... но оно того стоит.

TheCompWiz
источник
В этом контексте (данные конфигурации) FileSystem::\\Server\SomeShare\SomeFolder, безусловно, путь
Матиас Р. Джессен
2
Спасибо за предложения, но, к сожалению, используя любое из них, я получаю сообщение об ошибкеRelative path is not supported
Ричард