Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PowerShell工作流中正确使用Inlinescript的_Powershell_Azure_Powershell Remoting_Azure Automation_Hybrid Runbook Worker - Fatal编程技术网

在PowerShell工作流中正确使用Inlinescript的

在PowerShell工作流中正确使用Inlinescript的,powershell,azure,powershell-remoting,azure-automation,hybrid-runbook-worker,Powershell,Azure,Powershell Remoting,Azure Automation,Hybrid Runbook Worker,我有一个Azure Automation Powershell工作流Runbook,希望在混合Runbook Worker服务器上运行,作为Azure Site Recovery故障转移后操作步骤的一部分 在高层,runbook利用Azure运行方式连接来收集将进行故障转移的其中一个VM的私有IP地址。存储此IP地址,然后将其写入环境中配置的Active Directory DNS中的静态a记录 > 注意,我向你保证我们这样做是有充分理由的。我意识到机器本身在AD上出现时会刷新它的个人DNS名称

我有一个Azure Automation Powershell工作流Runbook,希望在混合Runbook Worker服务器上运行,作为Azure Site Recovery故障转移后操作步骤的一部分

在高层,runbook利用Azure运行方式连接来收集将进行故障转移的其中一个VM的私有IP地址。存储此IP地址,然后将其写入环境中配置的Active Directory DNS中的静态a记录

> 注意,我向你保证我们这样做是有充分理由的。我意识到机器本身在AD上出现时会刷新它的个人DNS名称条目,这是一个单独的a记录,我们希望指向故障转移服务器的IP地址。我们不使用CNAME,因为此服务器承载的应用程序存在已定义的问题

所以我必须更新这个记录。下面您将找到执行此操作的脚本。当我使用适当的凭据mydomain\ASRScript登录到服务器时,在混合Runbook服务器上运行下面的脚本时,它不会失败

workflow VisionWebFailover-Test
{

上述代码中的每一步都会成功进行,直到它到达Set DNSServerResourceRecord语句,并失败,出现如下所示的权限拒绝错误。这是我从Azure Automation portal运行作业的时候。当我在以用户身份登录的框中本地运行作业时,它工作正常

Set-DnsServerResourceRecord : Failed to update record customArecord.mydomain.com.
At VisionWebFailover-Test:27 char:27
+ 
   + CategoryInfo : PermissionDenied:(customArecord.mydomain.com:root/Microsoft/...rResourceRecord) 
[Set-DnsServerResourceRecord], CimException
    + FullyQualifiedErrorId : WIN32 5,Set-DnsServerResourceRecord
> 我认为我需要在InlineScript块的末尾使用,以强制代码在我想要的已定义用户上下文中针对DNS服务器执行。尽管我真正想要的是在已定义用户上下文中的混合runbook worker上执行命令

关于inlinescript文档说它接受

给我举了一个这样的例子

InlineScript{}

它引用了我希望使用的两个参数-PSComputerName和-PSCredential

我构建了一个像这样的凭证对象

$secpasswd=ConvertTo SecureString MyAwesomePassword-AsPlainText-Force $mycreds=New Object System.Management.Automation.PSCredential MYDOMAIN\asrscript,$secpasswd

我甚至还使用

$domainCred=获取AutomationPSCredential-名称“ASRScript”

当我运行代码并尝试模拟示例时,通过在InlineScript的末尾添加-PSComputername或-PSCredential,我会得到错误

第94行:char:7+-PSComputerName'MYDNSServer'-PSCredential$domainCred+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~找不到“-PSComputerName”命令。如果此命令定义为工作流,请确保它在调用它的工作流之前定义。如果它是直接在Windows PowerShell或i中运行的命令如果在此系统上不可用,请将其放置在InlineScript中:“InlineScript{-PSComputerName}”

如果我遵循上述错误的建议,将-PSComputerName和-PSCredential放在InlineScript块中,则会出现一个错误,即它找不到-PSComputerName和-PSCredential的Set-DNSServerResourceRecord的参数

> 我不知道我做错了什么

在runbook服务器上,我有所有适当的Powershell模块 安装。 它已加入域。 它被添加为DNSServer上的受信任主机,该服务器也是域控制器 我想要在其上下文中运行此操作的用户是MYDOMAIN\asrScript,它被添加为Azure自动化凭据工件 如果我尝试将混合工作程序的RUNAS用户更改为CUSTOM并选择我的AsrScript工件,则作业将挂起,并且永远不会运行。它将一直处于队列状态,直到挂起为止。我在系统事件日志中收到一个错误,用户无法进行身份验证。 我已经阅读了下面的远程故障排除文档 关于远程故障排除-

希望有人能帮忙。
谢谢!

找不到“-PSComputerName”命令表明由错误的代码格式引起的语法错误。PowerShell在将其解释为参数时遇到问题,它认为这是一个单独的命令。请说明如何将此参数准确地应用于InlineScript?例如,如果这样做,您将收到此错误这:

InlineScript {
    ...
}
-PSComputerName MyComputer
相反,您需要执行以下操作:

InlineScript {
    ...
} -PSComputerName MyComputer
或:


Anatoli,谢谢!这是您共享的第一个选项…代码就是这样编写的。我会回去测试,但我知道发生了什么。这样一个noob错误…我想这就是20多个小时查看同一代码并解决大量问题将带给您的。
InlineScript {
    ...
} -PSComputerName MyComputer
InlineScript {
    ...
} `
-PSComputerName MyComputer