如何在 powershell 中检测 Linux 或 macOS 或 Windows?
Posted
技术标签:
【中文标题】如何在 powershell 中检测 Linux 或 macOS 或 Windows?【英文标题】:How to detect Linux or macOS or Windows in powershell? 【发布时间】:2021-03-01 18:18:31 【问题描述】:我在 bash 脚本中使用uname -s
来确定操作系统,它在 Linux、macOS 或 Windows 上运行时返回 Linux、Darwin 或 MINGW64_NT...。
EDIT0:我希望我的$PROFILE
脚本检测操作系统是在 Windows 上运行 PS(版本可能低于 6)还是在 Linux 上运行 PSv>=6。
我在 powershell 中找到了这个:
PS> [System.Environment]::OSVersion.Platform
在 Linux 上,它返回 Unix
,在 64 位 Windows 上,它返回 Win32NT
。
我没有 macOS 可供我使用(还没有:))所以我不知道它在 macOS 上实际返回的内容。
EDIT1:Unix
和 Linux
或 Windows32b 和 Windows64b 之间的这种方法似乎没有什么不同。
powershell 5.1 中检测操作系统还有哪些其他方法?
【问题讨论】:
5.1 不能在 macOS 或 Linux 上运行。还有其他获取操作系统信息的方法,显示的方法还不够吗? @DougMaurer 你是对的。在我的 Linux 上,我有 PSv7,但在我的 win7 上,我有 PSv5.1。但我希望我的$PROFILE
脚本能够检测操作系统是在 PS5 还是 PS7 上运行。
【参考方案1】:
问题是 Powershell 5.1。
在此详述:https://devblogs.microsoft.com/scripting/powertip-determine-your-version-of-powershell-and-host-operating-system/
更多细节在这里:Determine the OS version, Linux and Windows from Powershell
Powershell 5.1 没有能力也无法确定 Microsoft 环境之外的操作系统。最好的办法是使用 get-wmi 或 cim-sesssion
windows
!windows
对于PowerShell Core (Powershell Version 6.0+),你可以使用自动变量:
$IsLinux
$IsMacOS
$IsWindows
6+ 你可以做一些事情:
foreach ($i in $info)
if ($i -eq $IsLinux)
Write-Host $i is Linux
elseif ($i -eq $IsMacOS)
Write-Host $i is This is a dirty, dirty Mac
elseif ($i -eq $IsWindows)
Write-Host $i is Windows
使用 PowerShell 5.1 完成您所要求的工作根本不可能/可能不值得。
【讨论】:
我明白了。你循环的这个$info
变量是什么?
我不懂get-wmi
和cim-sesssion
命令。 PowerShell 和 cmd.exe
都无法识别
$info 变量将是设备名称或 IP 地址数组或来自 get-content 的类似变量
Get-WmiObject 您可以连接到Windows 计算机并获取信息。在 PowerShell 5.1 的情况下,您可以确定“所有 Windows”计算机,并向它们请求信息,然后确定哪些不是 Windows。但是,您无法确定除此之外,因为 Linux/macOS/etc 不支持 Get-WmiObject。问题是最近没有使用 Get-WmiObject 而是使用 Get-CimInstance。 Great examples of using Get-CimInstance以上是关于如何在 powershell 中检测 Linux 或 macOS 或 Windows?的主要内容,如果未能解决你的问题,请参考以下文章