从网络共享复制 PowerShell DSC

从网络共享复制 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

当我尝试从网络共享安装包或从网络共享提取存档时,我得到了类似的结果。我在 Windows Server 2008 R2 SP1 上运行 PowerShell 4。

有没有办法将 PowerShell DSC 与网络共享一起使用?

答案1

DSC 本地配置管理器以本地系统帐户运行,而不是您的用户帐户。因此,除非获得明确权限,否则它将无法访问网络资源。

有两种可能的情况。要么共享与应用 DSC 配置的机器位于同一台机器上(我们称之为机器 A),要么共享位于另一台机器上(我们称之为机器 B)。

如果共享位于机器 A 上,则需要向 SYSTEM 用户授予 READ 权限。例如:

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/

答案2

运行DSClocalhost以应用配置。这意味着DSC需要将资源文件分发到每台要通过 进行配置的机器DSC

因此,从共享复制 DSC 文件时,权限管理至关重要。

DSCNT AUTHORITY\SYSTEM在该帐户下运行,除非Credential已设置该属性,否则Computer account在从网络共享中提取文件时使用。

因此,根据文件的提取位置,SYSTEM需要向帐户授予read本地共享的权限,并且Computer account需要向帐户授予read远程共享的权限。

Richards 的回答对此进行了详细说明,从语法角度进行了扩展原文来源获取此信息。

答案3

我目前没有时间进一步研究这个问题,但看起来可以安全地传递本地配置管理器使用的凭据。事实上,在博客文章中,他的示例使用文件资源从网络共享中提取文件。我希望很快尝试一下,然后再回来更好地充实这个答案。

TechNet 博客:想要在 Windows PowerShell 所需状态配置中保护凭据吗?- Travis Plunk 撰稿

答案4

Powershell 几乎和旧的 cmd shell 一样笨。它对 UNC 路径的支持仍然非常有限。考虑到这一点...您是否尝试过为 UNC 路径设置别名?即

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

然后将路径引用为UNCPath:\SomeFolderRemove-PSDrive完成后用 进行清理。

另外,有时您可以指定FileSystem::\\Server\SomeShare\SomeFolder路径。我见过这种方法不起作用的情况……但值得一试。

相关内容