2015-01-14 167 views
2

我想在PowerShell中使用环境变量,但我发现的例子似乎并不奏效。这是我使用的测试脚本:Powershell环境变量

Get-ChildItem Env: 
Write-Host "************" 
$AlarmDatastore = Get-ChildItem Env:*VMWARE_ALARM_TARGET_NAME* 
Write-Host "Var = " $AlarmDatastore.value 
$Test = $env:VMWARE_ALARM_TARGET_NAME 
Write-Host "Test = " $Test 

脚本的输出:

USERNAME      ADMIN.GABRI 
USERPROFILE     C:\Users\admin.gabri 
VMWARE_ALARM_ALARMVALUE  Current values for metric/state 
VMWARE_ALARM_DECLARINGSUMMARY ([Yellow metric Is above 10; Red metric Is a... 
VMWARE_ALARM_EVENTDESCRIPTION Alarm 'Alarm 10 percent test with script' on ... 
VMWARE_ALARM_ID    alarm-601 
VMWARE_ALARM_NAME    Alarm 10 percent test with script 
VMWARE_ALARM_NEWSTATUS   Red 
VMWARE_ALARM_OLDSTATUS   Gray 
VMWARE_ALARM_TARGET_ID   datastore-12587 
VMWARE_ALARM_TARGET_NAME  VCD-VMFS-095-FAST-VNX-5400-04 
VMWARE_ALARM_TRIGGERINGSUMM... Metric Disk Space actually used = 96 
windir       C:\Windows 
************ 
Var = VCD-VMFS-095-FAST-VNX-5400-04 
Test = 

为什么我只能使用获得环境VAR:获取ChildItem ENV:* VMWARE_ALARM_TARGET_NAME * ,而不是简单地由$测试= $ ENV:VMWARE_ALARM_TARGET_NAME

+0

你为什么在gci中使用通配符?为什么不使用'Get-Item Env:\ VMWARE_ALARM_TARGET_NAME'?我想知道在使用'$ env'的时候,gci调用中可能没有包含通配符吗? – briantist

+0

我将代码更改为您的建议,这就是结果。 代码: '$ Test2的= GET-项目ENV:\ VMWARE_ALARM_TARGET_NAME 写主机 “的Test2 =” $ Test2' 结果: GET-项目:找不到路径 'ENV:\ VMWARE_ALARM_TARGET_NAME',因为它不存在。 在G:\ DataStoreAlarms \ Scripts \ EnvTest.ps1:5 char:10 + $ Test2 = Get-Item Env:\ VMWARE_ALARM_TARGET_NAME + ~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~ + CategoryInfo:ObjectNotFound:Env:\ VMWARE_ALARM_TARGET_NAME:String)[Get-Item],ItemNotFoundException + FullyQualifiedErrorId:PathNotFound,Microsoft.PowerShell.Commands。 GetItemCommand – Gabrie

+0

如何:'gi env:* VMWARE_ALARM_TARGET_NAME * | fl *'? – briantist

回答

0

有几件事情尝试:

#Use ${ } for complex variable names 
${env:VMWARE_ALARM_TARGET_NAME} 

#Or as part of a print statement use env directly (with or without ${env:}): 
Write-Host "Test = $($env:VMWARE_ALARM_TARGET_NAME)" 

#At an interactive prompt see if it can be tab completed 
$env:VMWWARE #then tab to see if it shows up in auto complete 

另外,值得一看运行set时cmd.exe显示的内容。在PowerShell类型中:

cmd 
set 
exit 

并查看输出结果如何。

0

由于时间压力,我不得不去与现在这个权利:

$AlarmTARGET_NAME = get-childitem Env:*VMWARE_ALARM_TARGET_NAME* 
$AlarmNAME = get-childitem Env:*VMWARE_ALARM_NAME* 
$AlarmEVENTDESCRIPTION = get-childitem Env:*VMWARE_ALARM_EVENTDESCRIPTION* 
$AlarmDECLARINGSUMMARY = get-childitem Env:*VMWARE_ALARM_DECLARINGSUMMARY* 
$AlarmVALUE = get-childitem Env:*VMWARE_ALARM_ALARMVALUE* 

不是很干净的代码,但它的工作原理。 感谢所有的答复。

Gabrie