2016-12-01 3 views
2
Get-WmiObject -Class win32_logicaldisk -Filter 'DeviceID="C:"' 

делает то, что я хочу,Как расширить переменную в powershell?

$var="C:" 
Get-WmiObject -Class win32_logicaldisk -Filter 'DeviceID="{$var}"' 

ничего не делает. Я попытался изменить кавычки, объединить строки и другие 1000 вещей, но они не сработали. Почему приведенный выше пример не работает, и что будет работать?

+0

'-Filter "DeviceID = '$ Var'" '(обратите внимание на двойные кавычки строки фильтра) –

+0

@ MathiasR.Jessen Я попытался отменить цитаты, это не работает – Andrei

+1

Вы действительно попробовали? В вашем примере вы положили '{}' вокруг переменной, которая, несомненно, сделает запрос возвратом ничего –

ответ

3

Когда вы начинаете строковый литерал с ' (одиночные кавычки), вы создаете стенографическую строку - то есть каждый символ внутри строки интерпретируется буквально, а переменные ссылки и выражения не будут расширяться!

Используйте ", если вы хотите, чтобы переменная будет расширена:

$var = 'C:' 
Get-WmiObject -Class win32_logicaldisk -Filter "DeviceID='$var'" 

Если имя переменной имеет странные символы, или сопровождается словом характер, вы можете претендовать на имя переменной в фигурные скобки {} немедленно после того, как$:

$var = 'C:' 
Get-WmiObject -Class win32_logicaldisk -Filter "DeviceID='${var}'" 
Смежные вопросы