需要Powershell脚本帮助

问题描述 投票:2回答:1

我是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然后它将仅要求第二个变量值。

powershell scripting powershell-v3.0
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.