【发布时间】:2020-02-24 07:36:53
【问题描述】:
我的客户没有 Puppet、Chef 或 Choco,我无法在他的服务器上安装它们来安装我的应用程序。
- 检查已安装的 dotnet 框架版本。
- 转换为“.”分割字符串
- 转换为 System.Version(有些有 2 拆分或 3 拆分数组
- 与所需的 dotnetframework 版本进行比较,例如4.6.2
- 如果安装了更高版本,则中止
- 如果没有,则安装所需框架版本的 MSI/EXE
第 1 步:检查 dotnet 版本为 System.Version:
到目前为止我有:
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse |
Get-ItemProperty -name Version, Release -EA 0 |
Where-Object { $_.PSChildName -match 'Full'} |
Select-Object Version
但 GetType、Split、Select-String 对我不起作用。
目前尝试的错误和代码:
| Select-String $_
导致:Select-String:无法将参数绑定到参数“模式”,因为它为空。
| {Select-String $_}
结果:表达式只允许作为管道的第一个元素。
|Select-Object $_.GetType
没有列出版本的类型
|Select-Object $_.Split(".")
导致:您不能在空值表达式上调用方法。
编辑:@Theo 的回答很好,它现在可以包装安装 .net 4.6.2 逻辑,即:
$SourceURI = "https://download.microsoft.com/download/F/9/4/F942F07D-F26F-4F30-B4E3-EBD54FABA377/NDP462-KB3151800-x86-x64-AllOS-ENU.exe"
$FileName = $SourceURI.Split('/')[-1]
$BinPath = Join-Path $env:TEMP -ChildPath "dotnet462\$FileName"
if (!(Test-Path $BinPath))
{
Invoke-Webrequest -Uri $SourceURI -OutFile $BinPath
}
write-verbose "Executing $binpath /q /norestart"
Sleep 5
Start-Process -FilePath $BinPath -ArgumentList "/q /norestart" -Wait -NoNewWindow
【问题讨论】:
-
到底发生了什么?有错误吗?它说什么?返回了错误的数据?什么,期待什么?还有什么?
-
并最终想做一些类似 Select-Object $_.Split(".")|选择对象 [System.Management.Automation.SemanticVersion]::New($_.[0],$_.[1],$_.[2],$_.[3])
标签: .net powershell dsc