Пример на этой странице просто неправильный. Кажется, они имели в виду ссылку на путь C:\Scripts\WindowsPowerShell
, или они забыли процитировать каталог с пробелами в нем.
Так оно и должно быть один из них:
New-Item c:\scripts\WindowsPowerShell -type directory
New-Item 'c:\scripts\Windows PowerShell' -type directory
New-Item "c:\scripts\Windows PowerShell" -type directory
Спросите себя, что бы PowerShell
одиночку имел в виду? Каким параметром он бы соответствовал?
Edit: как комментаторы указывали, например, должен был показать nameSet
параметры, где указаны отдельные -Path
и -Name
, и якобы PowerShell
должен был быть значение параметра -Name
. Это выглядит правильно. Причина, по которой этот пример не сработал (и ваш, а также), состоит в том, что параметр не может быть указан позиционно, что вы можете увидеть в статье I MSDN, приведенной ниже, и в встроенной справке:
Type: String
Parameter Sets: nameSet
Aliases:
Required: True
Position: Named
Default value: None
Accept pipeline input: True (ByPropertyName)
Accept wildcard characters: False
В этом случае их пример должен был что-то вроде этих:
New-Item c:\scripts\Windows -Name PowerShell -type directory
New-Item -Path c:\scripts\Windows -Name PowerShell -type directory
Так вновь заявляя, названные параметры работали бы здесь, и позволило бы избежать путаницы.
Как правило, вы не должны использовать позиционные параметры в сценариях, если только они не очень ясно (и даже тогда, я бы рекомендовал избегать).
Использование названных параметров облегчило бы это определение. И завершение табуляции помогает с заполнением имен параметров и при завершении путей (обычно также с правильным цитированием).
Я думаю, вы должны изменить ваши, чтобы:
New-Item -Path $backupPath -Type Directory -Force
И глядя на этот Technet статье, это на самом деле не так хорошо. MSDN article on New-Item лучше, и это информация, которую вы должны увидеть при запуске Get-Help New-Item
.
Боковой вопрос:
Затем снова, PowerShell может потерпеть неудачу, когда сценарий просто получает слишком долго.
Что?
Я не шучу. У нас есть 5000-строчный монолитный PS, который настраивает настройку сервера, конфигурацию и обслуживание. Он сломался, потому что он слишком большой. Параметры просто проваливаются через функции в позиции друг друга без какой-либо прозрачной причины, и мы использовали инструменты статического анализа LLVM для проверки правильности написания потоков данных. После 5400 строк он просто разваливается сам по себе. Мы в процессе разбивки его на несколько скриптлетов. – patrickjp93
Согласовано. В конкретном примере указано, что он создаст новую папку с именем 'Windows PowerShell' в папке' C: \ Scripts'. – andyb
@andyb, смотря далее Я согласен с тобой и (теперь удалённым) другим комментарием, хотя я думаю, что это только добавляет, что позиционные параметры могут ввести в заблуждение. Я отредактировал, чтобы уточнить. Благодаря! – briantist