【问题标题】:PowerShell DSC Script Resources FailPowerShell DSC 脚本资源失败
【发布时间】:2016-04-13 18:37:10
【问题描述】:

这似乎无法正常工作

我有以下脚本资源。

 Script RDGatewayCreateRAP
        {
            SetScript = {
                $localhost = $using:localhost
                $forest = $using:forest
                Import-Module RemoteDesktopServices            
                New-Item -Path 'RDS:/GatewayServer/RAP' -Name 'RAP' -UserGroups "Domain Users@$forest" -ComputerGroupType 1 -ComputerGroup "Domain Computers@$forest"
            }
            GetScript = {
                return @{
                    GetScript = $GetScript
                    SetScript = $SetScript
                    TestScript = $TestScript
                    Result = ""
                }

            }
            TestScript = {
                Import-Module RemoteDesktopServices
                return [boolean](Get-ChildItem 'GatewayServer/RAP')
            }
            DependsOn = "[Script]RDDeploymentGatewayConfiguration"
        }

使用 Start-DscConfiguration -Wait -Verbose 进行此脚本的配置,它会出错

VERBOSE: [WIN-EEK1CL8BED9]:                            [[Script]RDGatewayCreateRAP::[cRdsServer]RdsServer] Importing cmdlet '
Convert-License'.
Cannot find path 'C:\Windows\system32\GatewayServer\RAP' because it does not exist.
    + CategoryInfo          : ObjectNotFound: (C:\Windows\system32\GatewayServer\RAP:) [], CimException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
    + PSComputerName        : localhost

这可能是因为未找到 RDS: 路径,因为 Import-Module RemoteDesktopServices 无法正常工作。也就是说,在失败的正上方,我看到 Import-Module RemoteDesktopServices 的详细日志记录正在发生。

如果我更改我的脚本资源,以便 SetScript、GetScript 和 TestScript 都将 powershell 作为新进程调用,它可以工作。

powershell -NoProfile -ExecutionPolicy Bypass -Command "$using:commandStoredAsAString"

如果我使用 Invoke-Command 或 Invoke-Expression,它会爆炸,所以运行一个单独的进程似乎是关键。有没有办法让脚本资源在没有这种 hack 的情况下正常工作,或者它们只是无用/执行不力?

【问题讨论】:

    标签: powershell dsc powershell-5.0


    【解决方案1】:

    问题出在 TestScript 中,它试图获取 'Get-ChildItem 'GatewayServer/RAP''。 Import-Module RemoteDesktopServices 工作正常。 如果要检查 gatewayServer\RAP 是否存在,请将 TestScript implementation 更改为 (Test-Path RDS:GatewayServer\RAP)。 脚本 RDGatewayCreateRAP { 设置脚本 = { $本地主机 = $使用:本地主机 $森林 = $使用:森林 导入模块 RemoteDesktopServices
    #New-Item -Path 'RDS:/GatewayServer/RAP' -Name 'RAP' -UserGroups "Domain Users@$forest" -ComputerGroupType 1 -ComputerGroup "Domain Computers@$forest" } 获取脚本 = { 返回 @{ 获取脚本 = $GetScript 设置脚本 = $SetScript 测试脚本 = $TestScript 结果 = "" }

            }
            TestScript = {
                Import-Module RemoteDesktopServices
                return (Test-Path RDS:GatewayServer\RAP)
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多