Ben*_*ham 14 powershell chocolatey
我的目标是创建一个单一的脚本,我可以下载并在新的Windows版本上运行,以尽可能地设置系统.我要做的第一件事就是安装尽可能多的程序.我之前运行过这个(来自chocolatey.org)直接从PowerShell安装Chocolatey:
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
Run Code Online (Sandbox Code Playgroud)
然后我跑了一堆choco install这样的:
choco install googlechrome -y
choco install git -y
choco install notepadplusplus -y
choco install sql-server-management-studio -y
Run Code Online (Sandbox Code Playgroud)
(我认为-y让它们在没有提示的情况下运行.)
该脚本应检查是否已安装Chocolatey,如果未安装,则运行安装脚本.然后它应该遍历一个包名列表并静默安装它们.
choco install在每个包上运行命令?如果您对如何使用其他方式实现我的主要目标有任何建议,请告诉我.
pos*_*ote 19
您可以通过查看PowerShell帮助文件和Microsoft技术文档来回答所有问题:
(Get-Command -Name Test-Path).Parameters
Get-help -Name Test-Path -Examples
Get-help -Name Test-Path -Full
Get-help -Name Test-Path -Online
Run Code Online (Sandbox Code Playgroud)
For 循环(我认为-y让它们在没有提示的情况下运行.)
正确,它应该始终用于脚本.
该脚本应检查是否已安装Chocolatey,如果未安装,则运行安装脚本.然后它应该遍历一个包名列表并静默安装它们.
•如何检测是否已安装Chocolatey?
使用上面的链接 - 或者在安装时设置环境变量,默认ChocolateyInstall设置为C:\ProgramData\Chocolatey.
Test-Path -Path "$env:ProgramData\Chocolatey"
Run Code Online (Sandbox Code Playgroud)
一种更确定的方式可能是尝试
$ChocoInstalled = $false
if (Get-Command choco.exe -ErrorAction SilentlyContinue) {
$ChocoInstalled = $true
}
# Do something with that for installation
Run Code Online (Sandbox Code Playgroud)
•如何根据该结果有条件地运行install命令?
使用if声明:
If(Test-Path -Path "$env:ProgramData\Chocolatey") {
DoYourPackageInstallStuff}
Else {
InstallChoco
DoYourPackageInstallStuff
}
Run Code Online (Sandbox Code Playgroud)
•如何遍历包列表并在每个包上运行choco install命令?
使用for循环:
$Packages = 'googlechrome', 'git', 'notepadplusplus', 'sql-server-management-studio'
ForEach ($PackageName in $Packages)
{
choco install $PackageName -y
}
Run Code Online (Sandbox Code Playgroud)
Microsoft有一个名为PackageManagement的内置包管理器管理器(内置于PowerShell v5中).您可以将它与ChocolateyGet提供程序一起使用(不要使用原型Chocolatey提供程序,它已损坏且存在安全问题)以管理第三方依赖项.
PackageManagement的优势在于它还具有用于管理PowerShell模块的PowerShellGet.
只需输入..
列出所有可用的模块/包
Find-Module
Find-Module -Name SomeSpecificModuleName(s)
Run Code Online (Sandbox Code Playgroud)
对于PowerShell版本3 - 4,您必须下载并安装PowerShellGet.
实际上,微软一直在开发windows-dev-box-setup-scripts来实现这一目标,使用boxstarter和Chocolatey
作为一个开源项目,您可以分叉或下载它并根据您的需要进行调整
希望能帮助到你 :)
这是我的答案,其中包含一个包含软件包列表的文件:
#Requires -RunAsAdministrator
Set-ExecutionPolicy Bypass -Scope Process -Force
# install chocolatey if not installed
if (!(Test-Path -Path "$env:ProgramData\Chocolatey")) {
Invoke-Expression((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
}
# for each package in the list run install
Get-Content ".\packages" | ForEach-Object{($_ -split "\r\n")[0]} | ForEach-Object{choco install -y $_}
Run Code Online (Sandbox Code Playgroud)
假设该路径中有一个名为packages以下内容的文件:
googlechrome
git
notepadplusplus
sql-server-management-studio
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11316 次 |
| 最近记录: |