标签: powershell

Get-Net* PowerShell cmdlet 因类无效而失败

如何对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)

powershell windows-10

4
推荐指数
1
解决办法
1万
查看次数

Powershell one-liner 使用 netstat 问题在与端口相同的行上显示进程

首先,我只想确保用户 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 工具。

script powershell netstat

4
推荐指数
2
解决办法
2万
查看次数

PowerShell - System.OutOfMemoryException

我想要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)

powershell memory-error windows-10

4
推荐指数
1
解决办法
5736
查看次数

由 cmd.exe 但不是 PowerShell 找到的 Windows 文件

在同一个系统,cmd.exepowershell.exe产生不同的结果两者通过其绝对路径和相对于$ PWD上市文件:

恩诺恩

CMD 看到它,而 PowerShell 没有。二进制文件似乎在 AFAICS 的任何地方都没有“隐藏”位。

我通过资源管理器中的 Windows 搜索确定了路径。

这里发生了什么?

windows powershell path filesystems cmd.exe

4
推荐指数
1
解决办法
1328
查看次数

如何在 Windows 中记录终端会话?

Linux 和 Unix 有script 命令,它非常有用:

脚本命令是一个记录终端会话的 Unix 实用程序。1 scriptreplay 命令为脚本提供了重播功能。[2] 默认情况下,会话在文件名打字稿中捕获;要指定不同的文件名,请在脚本命令后面加上一个空格和文件名,例如:脚本记录的会话。

ttyrec 程序提供相同类型的功能并提供多种绑定。

可以使用在线服务共享录制的 shell 会话。 [3] 从通常的截屏视频中以这种格式记录的会话的优点是可以轻松地从播放器屏幕复制/粘贴 shell 指令。

Windows 有什么相似之处?

也可以看看:

将交互式 bash 会话记录到 shell 脚本的工具

在linux中记录SSH终端

用于script命令的效用。

windows linux powershell shell command-line

4
推荐指数
1
解决办法
2577
查看次数

将 Regkey 异常添加到 Windows Defender 的脚本

如果我想要某种脚本向 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

4
推荐指数
1
解决办法
1万
查看次数

Powershell 如何在 Windows 中创建假驱动器标签?

在 Powershell 中(至少在 Windows 10EE 中),系统的某些部分在自定义驱动器标签下公开。我知道的两个主要例子是:

  1. HKLM: 将本地计算机的注册表公开为驱动器。
  2. $Env: 像他们自己的文件系统一样公开环境变量。

但是,cmd 和批处理脚本无法看到这些驱动器。

所以我的问题是:

  • Powershell 如何实现这些假驱动器标签?
  • 它们与 Linux 中的挂载点相似吗?
  • 他们是否在幕后使用某种伪文件系统?

windows powershell filesystems

4
推荐指数
1
解决办法
321
查看次数

无法在 CMD 或 PowerShell 上查看 Unicode

我确实有一个Centos 7服务器,我可以通过CMD或访问它PowerShell

但它将 Unicode 字符显示为 ?

在此处输入图片说明

但是如果我通过putty它访问它,它会正确显示。

在此处输入图片说明

windows powershell unicode command-line putty

4
推荐指数
1
解决办法
800
查看次数

如何正确过滤 wmic 磁盘驱动器列表

我正在尝试过滤 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

powershell wmi wmic

4
推荐指数
2
解决办法
1042
查看次数

使用 PowerShell Add-AppxPackage 安装 Windows Terminal .msixbundle

我正在尝试在没有任何管理员权限的 Windows 10 v1803 [build 17134.13.04] 上安装Windows 终端,并且 Microsoft Store 也已停用。我.msixbundleGitHub 发布页面下载并使用了这里的命令:

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)

windows powershell installation windows-terminal

4
推荐指数
1
解决办法
2万
查看次数