我是PowerShell脚本的新手。试图从网上学习它。现在我正在尝试编写脚本并面临一些问题,所以需要一些帮助和人们的建议。我正在描述我试图做的事情:
首先我声明了2个变量,然后我使用if语句来查看变量是否为空然后它会显示一条警告信息,它会询问用户的输入,之后它会显示值变量。但它给出了一些错误。
$workingdirectory = args[0]
$directoryname = args[1]
if ("$WorkingDirectory" -eq "")
{
Write-Warning "Parameter Required"
$WorkingDirectory = Read-Host "Enter the absolute path to working directory "
}
if ("$DirectoryName" -eq "")
{
Write-Warning "Paramater Required"
$DirectoryName = Read-Host "Enter a directory name to search for in $WorkingDirectory "
}
Write-Host "$WorkingDIrectory"
write-host "$DirectoryName"
当我运行它时,它显示以下错误:
ARGS [0]:术语' ARGS [0]'不被识别为cmdlet,函数,脚本文件或可操作程序的名称。检查拼写 名称,或者如果包含路径,请验证路径是否正确,然后重试。 在C:\ LAB_5-submission \ mmbillah1_Lab_testdir.ps1:24 char:21 + $ WorkingDirectory = ARGS [0] + ~~~~~~~ + CategoryInfo:ObjectNotFound:(ARGS [0]:String)[],CommandNotFoundException + FullyQualifiedErrorId:CommandNotFoundException
ARGS [1]:术语' ARGS [1]'不被识别为cmdlet,函数,脚本文件或可操作程序的名称。检查拼写 名称,或者如果包含路径,请验证路径是否正确,然后重试。 在C:\ LAB_5-submission \ mmbillah1_Lab_testdir.ps1:25 char:18 + $ DirectoryName = ARGS [1] + ~~~~~~~ + CategoryInfo:ObjectNotFound:(ARGS [1]:String)[],CommandNotFoundException + FullyQualifiedErrorId:CommandNotFoundException
我希望像这样运行:.\scriptname.ps1
,如果我使用它,那么它将显示警告并要求输入两个变量。
如果我运行此.\scriptname.ps1 C:\users\masum
,那么它将只询问第二个变量值。
答案 0 :(得分:3)
如果您打算使用现有的内容,问题的根源就是语法$args[0]
和$args[1]
。我强烈建议的是为脚本创建参数,然后测试这些参数是否有效,以及是否不提示它们。
参数可以在Param()
块中定义:
Param(
$workingdirectory,
$directoryname
)
这很简单,但是根据您的需要,它可以工作。您可以添加类型以确保将正确类型的事物作为参数传递,并添加测试以确保参数有效,但这超出了我们在此处所做的。
然后你会检查以确保每个都有一个值,我建议确保路径有效。类似的东西:
While([string]::IsNullOrEmpty($workingdirectory) -or !(Test-Path $workingdirectory)){
$workingdirectory = Read-Host "Enter a valid working directory"
}
检查$workingdirectory
变量是否为空或只是空格,如果它实际上有值,它将检查以确保它是一个有效的目录。如果它为空或路径无效,则会提示用户输入有效路径。您需要为$directoryname
变量重复此操作。
所以你最终会得到类似的东西:
Param(
$workingdirectory,
$directoryname
)
While([string]::IsNullOrEmpty($workingdirectory) -or !(Test-Path $workingdirectory)){
$workingdirectory = Read-Host "Enter a valid working directory"
}
While([string]::IsNullOrEmpty($directoryname) -or !(Test-Path $directoryname)){
$directoryname= Read-Host "Enter a valid target directory"
}
Write-Host $workingdirectory
Write-Host $directoryname