这是困难的一个。
我需要使用命令从我的服务器输出确切数量的内核。
我的测试:
X:在具有 4 个处理器(插槽)和 2 个内核的 Windows 服务器上,每个内核都没有 HT。Y:在具有 2 个处理器(插槽)和 6 个内核的 Windows Server 上,每个内核都带有 HT。GetSystemInfo只为我提供安装的处理器数量:X 为 4,Y 为 2。
| | X: 8 cores | Y: 12 cores |
| | 4x2 (no HT) | 2x6 (HT) |
|----------------|-------------|-------------|
| Desired output | 8 | 12 |
| GetSystemInfo | 4 | 2 |
Run Code Online (Sandbox Code Playgroud)
%NUMBER_OF_PROCESSORS%是一个很好的,但它考虑到了HT。它告诉我 X 为 8,Y 为 24(因为它有 HT,我需要它显示 12)。
| | X: 8 cores | …Run Code Online (Sandbox Code Playgroud) 我看到一些批处理脚本以这种方式工作,包括所有的stackoverflow.
我的问题很简单:为什么MEM部分不起作用?
@echo OFF
SET CPU="$CPU"
echo CPU: %NUMBER_OF_PROCESSORS%
FOR /F "delims=" %%i IN ('wmic computersystem get TotalPhysicalMemory') DO set MEM=%%i
echo MEM: %MEM%
Run Code Online (Sandbox Code Playgroud) 我需要过滤变量的内容,以将所有具有匹配字符串的行从SubnetExceptions.txt文件中排除,作为过滤器,就像一条grep -v命令一样。
$Value为了获得所需的格式,该变量经过了很多处理。
该代码的工作部分如下:
$Value=netsh dhcp server show mibinfo | findstr "Subnet Addresses"
$Value=$Value -replace "Subnet","% `n Subnet"
$Value=$Value -replace "No. of Addresses in use","AddressesInUse"
$Value=$Value -replace "No. of free Addresses","AddressesFree"
$Value=$Value -replace '^.|.$', ' '
$Value=$Value -replace ' ', ""
$Value=$Value -replace ' ', " "
$Value= -join $Value
$Value=$Value -replace '\n', ''
$Value=$Value -replace "% ", "`n"
$Value=$Value -replace ' = ', '='
Run Code Online (Sandbox Code Playgroud)
ps1的前11行$Value从以下命令处理该命令的输出():
子网= 10.1.8.0。
正在使用的地址数= 11。
免费地址数= 18。
子网= … scripting ×2
batch-file ×1
cpu-cores ×1
powershell ×1
processor ×1
replace ×1
windows ×1
wmic ×1