【发布时间】:2020-12-17 04:25:06
【问题描述】:
这是脚本:因为我对云基础设施自动化完全陌生,所以我被困在这个问题上。我基本上是在尝试将收集到的 VM 的详细信息添加到单独的列表中,具体取决于它们的电源状态。
工作流程 rg-startstop {
param(
[string]$power,
[string]$azureResourceGroup
)
$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
throw $_.Exception
}
}
$vms = Get-AzureRMVM -ResourceGroupName $azureResourceGroup
$vmrunninglist = @()
$vmstoppedlist = @()
Foreach($vm in $vms)
{
$vmstatus = Get-AzureRMVM -ResourceGroupName $azureResourceGroup -name $vm.name -Status
$PowerState = (get-culture).TextInfo.ToTitleCase(($vmstatus.statuses)[1].code.split("/")[1])
if ($Powerstate -eq 'Running')
{
$vmrunninglist = $vmrunninglist + $vm.name
}
if ($Powerstate -eq 'Deallocated')
{
$vmstoppedlist = $vmstoppedlist + $vm.name
}
}
if ($power -eq 'start') {
foreach ($vm in $vmrunninglist) {
Start-AzureRmVM -ResourceGroupName $azureResourceGroup -Name $vm.name -Verbose
}
}
if ($power -eq 'stop') {
foreach ($vm in $vmstoppedlist) {
Stop-AzureRmVM -ResourceGroupName $azureResourceGroup -Name $vm.name -Verbose -Force
}
}
}
错误是:您不能在空值表达式上调用方法。 那么,请问有人可以修改吗?
【问题讨论】:
-
Edit 问题并包含整个错误消息。它包含有关脚本失败的部分的信息。
-
通过添加try catch检查
$vms、$vmstatus、(get-culture)、(get-culture).TextInfo.ToTitleCase(($vmstatus.statuses)[1]、(get-culture).TextInfo.ToTitleCase(($vmstatus.statuses)[1].code、(get-culture).TextInfo.ToTitleCase(($vmstatus.statuses)[1].code.split("/")[1]中$vm的值。其中一个/几个是/是空的。
标签: azure powershell automation