我正在尝试获取所有Azure VirtualMachines和Azure SqlDatabases的OperatingHours标记详细信息。 以下是资源中appID的可能性以及我需要在输出中相应打印的值:
我是否需要单独处理选项(2),或者是打印操作时的任何正常值。
经过长时间的努力,我创建了以下脚本:
$ErrorOccured = $false
$resources = Get-AzureRmResource |
Where-Object {($_.ResourceType -eq "Microsoft.Compute/virtualMachines") -or ($_.ResourceType -eq "Microsoft.Sql/servers/databases")} |
foreach {
new-object psobject -Property @{
ResourceName = $_.ResourceName;
ResourceType = $_.ResourceType;
OperatingHours= try {
$ErrorActionPreference = 'SilentlyContinue';
($_ | select -expand Tags).OperatingHours; }
catch {
$ErrorOccured = $true ; }
if ($ErrorOccured)
{ "Tag not present" }
else {
($_ | select -expand Tags).OperatingHours;
$ErrorOccured = $false };}
}
$resources | Format-Table
运行此脚本时,我收到以下错误:
At line:13 char:58
+ }
+ ~
The hash literal was incomplete.
At line:20 char:2
+ }
+ ~
Unexpected token '}' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : IncompleteHashLiteral
如果我用以下代码替换OperatingHours语句,则脚本运行成功。但在这样做时,我无法满足上述选项(1)。
Operating Hours = if (!($_ | select -expand Tags).OperatingHours)
{"Tag not present"}
else {($_ | select -expand Tags).OperatingHours} ;
请告诉我如何更正并获得所需的输出。
由于
答案 0 :(得分:0)
经过大量的打击和试验以及严格的测试后,我找到了我想要的东西:
OperatingHours = if ( ($_ | select -expand Tags).OperatingHours -ieq $null )
{"TAG NOT PRESENT"}
elseif ( ($_ | select -expand Tags).OperatingHours -ieq '')
{"NULL/EMPTY"}
else
{($_ | select -expand Tags).OperatingHours } ;
我将原始脚本中的OperatingHours语句替换为上面的内容。
解决方案看起来很简单,找到之后我就好像我之前可以错过的那样,但这就是学习过程的全部内容,对吧?