如何对Get-Net*PowerShell cmdlet 进行故障排除和修复?以下所有内容都失败了Invalid class。我使用的是 Windows 10 版本 1511,此时没有升级到 1607 的选项。
第一个 PowerShell 版本:
PS C:\WINDOWS\system32> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
5 0 10586 672
Run Code Online (Sandbox Code Playgroud)
错误:
PS C:\WINDOWS\system32> Get-NetAdapter
Get-NetAdapter : Invalid class
At line:1 char:1
+ Get-NetAdapter
+ ~~~~~~~~~~~~~~
+ CategoryInfo : MetadataError: (MSFT_NetAdapter:ROOT/StandardCimv2/MSFT_NetAdapter) [Get-NetAdapter], CimException
+ FullyQualifiedErrorId : HRESULT 0x80041010,Get-NetAdapter
PS C:\WINDOWS\system32> Get-NetIPAddress
Get-NetIPAddress : Invalid class
At line:1 char:1
+ Get-NetIPAddress
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : MetadataError: (MSFT_NetIPAddress:ROOT/StandardCimv2/MSFT_NetIPAddress) [Get-NetIPAddress], CimException …Run Code Online (Sandbox Code Playgroud) 首先,我只想确保用户 Erik Bitemo 获得了我在这里使用的原始代码的信任。输出是我正在寻找的一个例外:其中一个端口消失并且“System System5”出现在它的位置,我无法弄清楚为什么会发生这种情况。
目标:在同一行上显示所有 TCP(侦听)和 UDP 端口以及与每个端口关联的进程。
正在使用的一种衬垫:
$nets = netstat -bano|select-string 'LISTENING|UDP'; foreach ($n in $nets) { $p = $n -replace ' +',' '; $nar = $p.Split(' '); $pname = $(Get-Process -id $nar[-1]).ProcessName; $n -replace "$($nar[-1])","$($ppath) $($pname)"; }
Run Code Online (Sandbox Code Playgroud)
示例输出:
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING svchost
TCP 0.0.0.0: System System5 0.0.0.0:0 LISTENING System
TCP 0.0.0.0:623 0.0.0.0:0 LISTENING LMS
它更改的端口是 445,但我不知道为什么当其余端口按预期工作时它只更改那个端口。为什么脚本将 445 更改为“System System5”?
不幸的是,无法使用其他工具,因此我只能使用内置的 Windows 工具。
我想要Get-Content一个大(1GB - 10GB).txt文件(只有 1 行!)并将其拆分为多个包含多行的文件,但是每当我尝试时,我都会以System.OutOfMemoryException.
当然,我确实在寻找解决方案,但我找到的所有解决方案都是逐行读取文件,当文件只有 1 行时,这有点难以做到。
尽管 PowerShell 在加载 1 GB 文件时最多占用 4 GB RAM,但问题与我的 RAM 无关,因为我总共有 16 GB,即使在后台运行游戏,峰值使用率也约为 60%。
我将 Windows 10 与 PowerShell 5.1(64 位)一起使用,并且 myMaxMemoryPerShellMB设置为默认值2147483647.
这是我编写并正在使用的脚本,它适用于例如 100MB 的文件大小:
$source = "C:\Users\Env:USERNAME\Desktop\Test\"
$input = "test_1GB.txt"
$temp_dir = "_temp"
# 104'857'600 bytes (or characters) are exactly 100 MB, so a 1 GB file has exactly
# 10 temporary files, which have all the same size, and amount …Run Code Online (Sandbox Code Playgroud) 在同一个系统,cmd.exe并powershell.exe产生不同的结果两者通过其绝对路径和相对于$ PWD上市文件:

CMD 看到它,而 PowerShell 没有。二进制文件似乎在 AFAICS 的任何地方都没有“隐藏”位。
我通过资源管理器中的 Windows 搜索确定了路径。
这里发生了什么?
如果我想要某种脚本向 Windows 文件保护程序添加排除项,我可以通过将以下文本另存为 .bat 文件并运行它来执行以下操作:
powershell -inputformat none -outputformat none -NonInteractive -Command Add-MpPreference -ExclusionPath "mypath"
Run Code Online (Sandbox Code Playgroud)
但是,如果我想以类似的方式向 Windows Defender 添加特别是注册表项例外,我将如何实现呢?甚至可以将注册表项添加为 Windows Defender 的例外吗?
windows windows-registry powershell windows-defender windows-10
在 Powershell 中(至少在 Windows 10EE 中),系统的某些部分在自定义驱动器标签下公开。我知道的两个主要例子是:
HKLM: 将本地计算机的注册表公开为驱动器。$Env: 像他们自己的文件系统一样公开环境变量。但是,cmd 和批处理脚本无法看到这些驱动器。
所以我的问题是:
我正在尝试过滤 wmic 列表的结果,where-object但不幸的是这似乎不起作用。
wmic diskdrive list brief | Where-Object -Property "Caption" -Contains "Samsung"
Run Code Online (Sandbox Code Playgroud)
过滤后的结果为空,未过滤的结果如下:
Caption DeviceID Model Partitions Size
HGST HUH721212ALE600 \\.\PHYSICALDRIVE1 HGST HUH721212ALE600 1 12000132426240
OCZ-VERTEX3 \\.\PHYSICALDRIVE3 OCZ-VERTEX3 1 240054796800
Samsung SSD 970 EVO Plus 1TB \\.\PHYSICALDRIVE5 Samsung SSD 970 EVO Plus 1TB 4 1000202273280
ST16000NM001G-2KK103 \\.\PHYSICALDRIVE4 ST16000NM001G-2KK103 1 16000900392960
ST6000NM0024-1HT17Z \\.\PHYSICALDRIVE0 ST6000NM0024-1HT17Z 1 6001172513280
Samsung SSD 840 PRO Series \\.\PHYSICALDRIVE2 Samsung SSD 840 PRO Series 1 512105932800
Run Code Online (Sandbox Code Playgroud)
如何正确过滤?
最后,我想得到DeviceID,例如,PHYSICALDRIVE5
我正在尝试在没有任何管理员权限的 Windows 10 v1803 [build 17134.13.04] 上安装Windows 终端,并且 Microsoft Store 也已停用。我.msixbundle从GitHub 发布页面下载并使用了这里的命令:
add-appxpackage -Path ".\Microsoft.WindowsTerminal_1.4.3141.0_8wekyb3d8bbwe.msixbundle"
Run Code Online (Sandbox Code Playgroud)
但是,我收到错误:
add-appxpackage : Deployment failed with HRESULT: 0x80073CF0, Package could not be opened.
error 0x8007007B: Opening the package from location Microsoft.WindowsTerminal_1.4.3141.0_8wekyb3d8bbwe.msixbundle
failed.
NOTE: For additional information, look for [ActivityId] b425a102-b6a8-0001-5add-56b4a8b6d601
in the Event Log or use the command line Get-AppxLog -ActivityID b425a102-b6a8-0001-5add-56b4a8b6d601
At line:1 char:1
+ add-appxpackage -Path ".\Microsoft.WindowsTerminal_1.4.3141.0_8wekyb3 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OpenError: (C:\Users\Farima...bbwe.msixbundle:String) …Run Code Online (Sandbox Code Playgroud) powershell ×10
windows ×6
windows-10 ×3
command-line ×2
filesystems ×2
cmd.exe ×1
installation ×1
linux ×1
memory-error ×1
netstat ×1
path ×1
putty ×1
script ×1
shell ×1
unicode ×1
wmi ×1
wmic ×1