需要Powershell脚本帮助

时间:2018-03-01 00:12:05

标签: powershell scripting powershell-v3.0

我是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,那么它将只询问第二个变量值。

1 个答案:

答案 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
相关问题