2012-07-02 5 views
2

Я пытаюсь написать простую строку кода, которая удалит различные пользовательские файлы с диска C для разных серверов. Как объединиться с PowerShell, чтобы получить путь к серверу?Конкатенация PowerShell

Например, это то, что я пытаюсь сделать, но PowerShell не распознает + символ как конкатенация я думаю:

remove-item "\\$server" + '\C$\Documents and Settings\a409126' -force -recurse -whatif 

Я получаю сообщение об ошибке сказав:

Remove-Item : A positional parameter cannot be found that accepts argument '+'. 

ответ

6

Попробуйте это:

remove-item ("\\$server" + '\C$\Documents and Settings\a409126') -force -recurse -whatif

Вы должны знать больше о command mode vs. expression mode, чтобы быть эффективным в шикарном

+0

Это работает! Спасибо! Значит, только простая скобка вызвала проблему? Странно, но приятно знать будущее. – Valrok

+0

Есть два режима в PoSH, о которых вам нужно знать. см. ссылку в исходном ответе. – Akim

+0

Хмм теперь понятно, почему код, который я написал выше, отлично работал с другими частями моего кода, где я назначал это переменной вместо того, чтобы делать то, что я пытался сделать здесь. – Valrok

2

Один из способов заключается в использовании переменной расширения:

Remove-Item "\\$server\C$\Documents and Settings\a409126" -Force ... 

Другой способ с Join-Path командлет:

Join-Path -Path \\$server -ChildPath 'C$\Documents and Settings\a409126' 
+0

c $ вызовет проблему в вашем первом примере, если вы не используете одинарные кавычки;) – x0n

+1

По-видимому, это не так. С двойными кавычками '$' не расширяется, поскольку после него нет символов. –

0

Вы хотите удалить элементы от пути, к которому вы должны присоединиться, так:

Join-Path "\\$server" "C$\Documents and Settings\a409126" |Remove-Item -Force -Recurse -Whatif 
+0

Это уже было сказано в другом ответе –

Смежные вопросы