cqu*_*ini 52 powershell powershell-ise
我是powershell的新手,并试图自学基础知识.我需要编写一个ps脚本来解析一个文件,这并不算太难.
现在我想更改它以将变量传递给脚本.该变量将是解析字符串.现在,变量将始终为1个单词,而不是一组单词或多个单词.
这看起来很简单,但对我来说却是一个问题.这是我的简单代码:
$a = Read-Host
Write-Host $a
Run Code Online (Sandbox Code Playgroud)
当我从命令行运行脚本时,变量传递不起作用:
.\test.ps1 hello
.\test.ps1 "hello"
.\test.ps1 -a "hello"
.\test.ps1 -a hello
.\test.ps1 -File "hello"
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我已经尝试了许多没有成功的方法,脚本将值输出它.
脚本确实运行,并等待我键入一个值,当我这样做时,它会回显该值.
我只是想让它输出我传入的值,我错过了什么小事?
谢谢.
Sol*_*lex 64
在第一行的test.ps1中进行此操作
param(
[string]$a
)
Write-Host $a
Run Code Online (Sandbox Code Playgroud)
然后你可以用它来调用它
./Test.ps1 "Here is your text"
Run Code Online (Sandbox Code Playgroud)
在这里找到
Bri*_*ens 50
这是关于Powershell params的一个很好的教程:
基本上,您应该在脚本param的第一行使用语句
param([type]$p1 = , [type]$p2 = , ...)
或使用$ args内置变量,该变量由所有args自动填充.
小智 9
在test.ps1中声明参数:
Param(
[Parameter(Mandatory=$True,Position=1)]
[string]$input_dir,
[Parameter(Mandatory=$True)]
[string]$output_dir,
[switch]$force = $false
)
Run Code Online (Sandbox Code Playgroud)
从运行或Windows任务计划程序运行脚本:
powershell.exe -command "& C:\FTP_DATA\test.ps1 -input_dir C:\FTP_DATA\IN -output_dir C:\FTP_DATA\OUT"
Run Code Online (Sandbox Code Playgroud)
要么,
powershell.exe -command "& 'C:\FTP DATA\test.ps1' -input_dir 'C:\FTP DATA\IN' -output_dir 'C:\FTP DATA\OUT'"
Run Code Online (Sandbox Code Playgroud)
小智 7
传递参数如下,
Param([parameter(Mandatory=$true,
HelpMessage="Enter name and key values")]
$Name,
$Key)
Run Code Online (Sandbox Code Playgroud)
.\script_name.ps1 -Name name -Key key