我正在尝试使用 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
答案2
运行DSC
于localhost
以应用配置。这意味着DSC
需要将资源文件分发到每台要通过 进行配置的机器DSC
。
因此,从共享复制 DSC 文件时,权限管理至关重要。
DSC
NT 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:\SomeFolder
。Remove-PSDrive
完成后用 进行清理。
另外,有时您可以指定FileSystem::\\Server\SomeShare\SomeFolder
路径。我见过这种方法不起作用的情况……但值得一试。