为什么我的Azure Runbook不能通过Powershell执行我的Python脚本

2024-10-03 06:20:08 发布

您现在位置:Python中文网/ 问答频道 /正文

当我远程进入我的虚拟机来执行这个Powershell脚本时,一切正常

但是,如果我尝试在Azure Runbook中运行脚本,它将执行,但Python脚本不会触发,我不知道为什么:(它似乎跳过了它。我是否遗漏了什么

这是我运行手册中的代码

$connectionName = "AzureRunAsConnection"
try
{
    # Get the connection "AzureRunAsConnection 
    $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName
    "Logging in to Azure..."
    Add-AzureRmAccount `
        -ServicePrincipal `
        -TenantId $servicePrincipalConnection.TenantId `
        -ApplicationId $servicePrincipalConnection.ApplicationId `
        -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
}
catch {
    if (!$servicePrincipalConnection)
    {
        $ErrorMessage = "Connection $connectionName not found."
        throw $ErrorMessage
    } else{
        Write-Error -Message $_.Exception
        "are we here"
        throw $_.Exception

    }
}
$rgname ="MyResourceName"
$vmname ="MyVirtualMachine"
$ScriptToRun = "c:\mypath\myscript.ps1"
Out-File -InputObject $ScriptToRun -FilePath ScriptToRun.ps1
$run = Invoke-AzureRmVMRunCommand -ResourceGroupName $rgname -Name $vmname -CommandId 'RunPowerShellScript' -ScriptPath ScriptToRun.ps1
Write-Output $run.Value[0]
Remove-Item -Path ScriptToRun.ps1

这里是myscript.ps1(Python的路径由环境变量设置)

Write-Output "Script Started."
Python C:\myscripts\pythonscript.py
Write-Output "Script Ended." 

然后我将看到这个输出

Script Started.
Script Ended.
< Py脚本的基本输出应该在中间,但我一无所获。再次,如果我在本地运行,它工作正常。

谢谢你的帮助


Tags: name脚本outputgetservicescriptazurewrite
1条回答
网友
1楼 · 发布于 2024-10-03 06:20:08

尝试将脚本迁移到新的^{}模块,确保已在自动化帐户中安装了Az.AccountsAz.Compute

$connectionName = "AzureRunAsConnection"
try
{
    # Get the connection "AzureRunAsConnection 
    $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName
    "Logging in to Azure..."
    Connect-AzAccount `
        -ServicePrincipal `
        -TenantId $servicePrincipalConnection.TenantId `
        -ApplicationId $servicePrincipalConnection.ApplicationId `
        -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
}
catch {
    if (!$servicePrincipalConnection)
    {
        $ErrorMessage = "Connection $connectionName not found."
        throw $ErrorMessage
    } else{
        Write-Error -Message $_.Exception
        "are we here"
        throw $_.Exception

    }
}
$rgname ="MyResourceName"
$vmname ="MyVirtualMachine"
$ScriptToRun = "c:\mypath\myscript.ps1"
Out-File -InputObject $ScriptToRun -FilePath ScriptToRun.ps1
$run = Invoke-AzVMRunCommand -ResourceGroupName $rgname -Name $vmname -CommandId 'RunPowerShellScript' -ScriptPath ScriptToRun.ps1
Write-Output $run.Value[0]
Remove-Item -Path ScriptToRun.ps1

相关问题 更多 >