如何从 Powershell runbook 访问 VM 中的脚本文件
How to reach a script file in a VM from Powershell runbook
我在 VM 中有一个脚本文件,我想从 Powershell Runbook 中的 Azure 门户访问它,但找不到该文件。文件手动保存在虚拟机的c:\下。
Azure Runbook 中的代码片段:
IF ($VmAction -eq "Shutdown") {
try
{
Invoke-AzVMRunCommand -ResourceGroupName $ResourceGroupName -VMName $VmName -CommandId 'RunPowerShellScript' -ScriptPath 'C:\stopservice.ps1' -ErrorVariable result
Stop-AzVM -Name $VmName -ResourceGroupName $ResourceGroupName -Force
}
catch
{
throw "Error: $($_.Exception.Message)"
}
命令 "Invoke-AzVMRunCommand -ResourceGroupName $ResourceGroupName -VMName $VmName -CommandId 'RunPowerShellScript' -ScriptPath 'C:\stopservice.ps1' -ErrorVariable result" 可以在我的计算机上的 powershell 上使用,所以我认为问题可能出在 Azure 中。
脚本文件(c:\stopservice.ps1):
try
{
Stop-Service -Name SSASTELEMETRY
}
catch
{
throw "Error: $($_.Exception.Message)"
}
(ps。服务名称用于测试目的,当它工作时将停止不同的服务)
让您的 Azure Automation 运行预订如下所示的东西。它应该可以满足您的要求。
$ServicePrincipalConnection = Get-AutomationConnection -Name 'AzureRunAsConnection'
Add-AzAccount -ServicePrincipal -TenantId $ServicePrincipalConnection.TenantId -ApplicationId $ServicePrincipalConnection.ApplicationId -CertificateThumbprint $ServicePrincipalConnection.CertificateThumbprint
$rgname ="rrrrrrrrrrrrrr"
$vmname ="vvvvvvvvvvvvvv"
$ScriptToRun = "c:\test.ps1"
Out-File -InputObject $ScriptToRun -FilePath ScriptToRun.ps1
Invoke-AzVMRunCommand -ResourceGroupName $rgname -Name $vmname -CommandId 'RunPowerShellScript' -ScriptPath ScriptToRun.ps1
Remove-Item -Path ScriptToRun.ps1
注意:在您 运行 您的 运行 书之前,请确保使用您的资源组名称更新“rrrrrrrrrrrrrrrrrrrr”,并使用您的 VM 名称更新“vvvvvvvvvvvvvv”,并确保您拥有 PowerShell在虚拟机的 C:\ 驱动器中命名为 test.ps1.
我在 VM 中有一个脚本文件,我想从 Powershell Runbook 中的 Azure 门户访问它,但找不到该文件。文件手动保存在虚拟机的c:\下。
Azure Runbook 中的代码片段:
IF ($VmAction -eq "Shutdown") {
try
{
Invoke-AzVMRunCommand -ResourceGroupName $ResourceGroupName -VMName $VmName -CommandId 'RunPowerShellScript' -ScriptPath 'C:\stopservice.ps1' -ErrorVariable result
Stop-AzVM -Name $VmName -ResourceGroupName $ResourceGroupName -Force
}
catch
{
throw "Error: $($_.Exception.Message)"
}
命令 "Invoke-AzVMRunCommand -ResourceGroupName $ResourceGroupName -VMName $VmName -CommandId 'RunPowerShellScript' -ScriptPath 'C:\stopservice.ps1' -ErrorVariable result" 可以在我的计算机上的 powershell 上使用,所以我认为问题可能出在 Azure 中。
脚本文件(c:\stopservice.ps1):
try
{
Stop-Service -Name SSASTELEMETRY
}
catch
{
throw "Error: $($_.Exception.Message)"
}
(ps。服务名称用于测试目的,当它工作时将停止不同的服务)
让您的 Azure Automation 运行预订如下所示的东西。它应该可以满足您的要求。
$ServicePrincipalConnection = Get-AutomationConnection -Name 'AzureRunAsConnection'
Add-AzAccount -ServicePrincipal -TenantId $ServicePrincipalConnection.TenantId -ApplicationId $ServicePrincipalConnection.ApplicationId -CertificateThumbprint $ServicePrincipalConnection.CertificateThumbprint
$rgname ="rrrrrrrrrrrrrr"
$vmname ="vvvvvvvvvvvvvv"
$ScriptToRun = "c:\test.ps1"
Out-File -InputObject $ScriptToRun -FilePath ScriptToRun.ps1
Invoke-AzVMRunCommand -ResourceGroupName $rgname -Name $vmname -CommandId 'RunPowerShellScript' -ScriptPath ScriptToRun.ps1
Remove-Item -Path ScriptToRun.ps1
注意:在您 运行 您的 运行 书之前,请确保使用您的资源组名称更新“rrrrrrrrrrrrrrrrrrrr”,并使用您的 VM 名称更新“vvvvvvvvvvvvvv”,并确保您拥有 PowerShell在虚拟机的 C:\ 驱动器中命名为 test.ps1.