如何使用Powershell下载脚本文件,然后通过传入参数执行它?
我通常使用以下命令来运行某些powershell脚本:如何使用Powershell下载脚本文件,然后通过传入参数执行它?,powershell,Powershell,我通常使用以下命令来运行某些powershell脚本: &“\NuGet\NuGet Package and Publish.ps1”-版本$env:appveyor\u build\u版本-NuGet”C:\Tools\NuGet\NuGet.exe”-apiKey$env:apiKey 工作正常,但脚本在我的服务器上本地找到 我希望说:用参数运行这个脚本,等等。。好的但该脚本被定位为要点或某些GitHub公共回购协议 这可能吗?如果我正确理解了这个问题,这就是对我有效的方法: (new-ob
&“\NuGet\NuGet Package and Publish.ps1”-版本$env:appveyor\u build\u版本-NuGet”C:\Tools\NuGet\NuGet.exe”-apiKey$env:apiKey
工作正常,但脚本在我的服务器上本地找到
我希望说:用参数运行这个脚本,等等。。好的但该脚本被定位为要点或某些GitHub公共回购协议
这可能吗?如果我正确理解了这个问题,这就是对我有效的方法:
(new-object net.webclient).DownloadFile('https://gist.githubusercontent.com/AndrewSav/c4fb71ae1b379901ad90/raw/23f2d8d5fb8c9c50342ac431cc0360ce44465308/SO33205298','local.ps1')
./local.ps1 "parameter title"
输出:
使用参数调用:参数标题
这是下载并执行以下要点:在linux世界中,这通常被称为“到bash的管道” 下面是一个安装chef的示例 同样的事情也可以通过powershell实现
. { iwr -useb https://omnitruck.chef.io/install.ps1 } | iex; install
iwr
是Invoke WebRequest
的缩写,iex
是Invoke Expression
由于您特别询问了传入参数的问题,下面是一个使用args的示例
. { iwr -useb https://omnitruck.chef.io/install.ps1 } | iex; install -channel current -project chefdk
你可以更清楚地了解它是如何工作的
基本上,将powershell脚本作为github gist宿主,然后在脚本中将所有内容包装在一个模块中
new-module -name foobar -scriptblock {
Function Foo() {
}
Function Bar() {
}
Function Install-Project() {
param (
[string]$project = 'chef',
[string]$channel = 'stable'
)
Foo
Bar
}
set-alias install -value Install-Project
export-modulemember -function 'Foo','Bar' -alias 'install'
}
最佳做法 “PipingtoBash”是有争议的,因为如果您不小心的话,攻击者理论上可能会拦截您的脚本并用自己的脚本替换
- 仅安装您控制或完全信任的脚本
- 或者验证下载文件的哈希值
- 仅从https下载
调用表达式
,但您需要处理参数传递。这可能不是一件很简单的事情——取决于参数。查看下载/安装脚本。你可以做类似的事情,你只需要知道如何传递参数,因为巧克力没有。是的。我希望你会说“使用iex
。。但当我试图传递args给它时,我从来没有这样做过…对不起。将缺少文件系统访问添加到问题中,因为这是information.Np的关键部分。没有缺席。我只是想知道,如果文件系统访问被拒绝,是否也可以使用iex来回答。
new-module -name foobar -scriptblock {
Function Foo() {
}
Function Bar() {
}
Function Install-Project() {
param (
[string]$project = 'chef',
[string]$channel = 'stable'
)
Foo
Bar
}
set-alias install -value Install-Project
export-modulemember -function 'Foo','Bar' -alias 'install'
}