需要Powershell脚本编写帮助

3

我对PowerShell脚本非常陌生。正在尝试从网络学习。现在,我正在尝试编写一个脚本并遇到一些问题,所以需要你们的帮助和建议。我将描述我尝试做的事情:

首先,我声明了两个变量,然后使用了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 字符: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 字符:18 +$DirectoryName = ARGS [1] + ~~~~~~~ + CategoryInfo :ObjectNotFound:(ARGS [1]:String) [],CommandNotFoundException + FullyQualifiedErrorId :CommandNotFoundException
我想像这样运行:.\scriptname.ps1,如果我使用这个命令,它会显示警告并提示输入两个变量。如果我运行 .\scriptname.ps1 C:\users\masum,则只会要求第二个变量的值。

让我猜猜 - 如果你传递了所需的两个参数,它就会运行? - NightOwl888
1个回答

4
您的问题根源只是语法,应该使用$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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接