标签: powershell

在powershell中列出并分类包含字符串X的所有文件的方法

目前,当我在 powershell 中查找一堆文件中的字符串时,我使用以下命令:

PS: C:\> ls -r | Select-String "dummy" | ls -r
Run Code Online (Sandbox Code Playgroud)

这会列出所有包含该字符串的文件。如果我做任何一个

PS: C:\> ls -r | Select-String "dummy" | ls -r | cat
PS: C:\> ls -r | Select-String "dummy" | cat
Run Code Online (Sandbox Code Playgroud)

它将再次搜索并捕获包含该字符串的所有文件,但所有内容都以一个块的形式出现,例如

file 1 line 1
file 1 line 2
file 2 line 1
file 3 line 1
file 4 line 1
Run Code Online (Sandbox Code Playgroud)

但无法判断哪一行位于哪个文件中。有没有办法让它列出类似的内容:

File 1.txt:
file1 line1
file2 line2

File 2.txt:
file2 line1
Run Code Online (Sandbox Code Playgroud)

等。最好使用单衬,但不是必需的

powershell

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

使用 Powershell 打开开始菜单

我目前正在开发业务流程自动化软件,实际上用户操作是由机器人模拟的。我需要将一些信息传递到 Windows 7 的开始菜单,我想知道是否可以使用 powershell 脚本打开 Windows 开始菜单?因为机器人可以理解打开powershell的信息。请任何建议都会很好。

windows-7 start-menu powershell

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

Linux 和 macOS 上用户的 PowerShell 历史记录保存路径位置?

非 Windows 操作系统上的 PowerShell 历史记录保存文件位于何处?

linux powershell history macos

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

VirtualBox:从命令行在来宾和主机之间切换对连接的 USB 设备的访问

我有一台远程 Windows 10 计算机,它作为 Linux (Debian 9) 的主机,在 VirtualBox 中以访客身份运行。VM 在网络桥接模式下运行,因此两个操作系统都有本地 IP 地址并且可以“看到”对方。我可以从本地计算机通过 SSH 访问来宾 Linux(它是 VPN 的一部分)。从访客中,我还可以通过 SSH 服务器(内置于 Windows 10 中)访问主机的命令提示符/bash/powershell。有时我需要能够从两个操作系统访问连接的 USB 设备。不一定要同时进行——一个接着一个就可以了。

通过 VirtualBox GUI(设备 -> USB 设备)在主机和来宾之间切换连接的 USB 设备非常简单。但是有没有办法从命令行执行此操作 - 无论是从主机还是从来宾,或者更好的是,从两者都进行?

linux usb virtualbox powershell windows-10

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

使用 powershell 或 .bat 将证书从 .cer 转换为 .pem

我正在尝试找到一种方法,使用 powershell 或 Windows 原生的 cmdline 将 .cer 格式的证书转换为 .pem 格式。有谁知道如何做到这一点?

powershell batch command-line batch-file

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

为什么命令提示符和 PowerShell 给出的输出结果与终端不同?

我有一本书中的以下示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
  printf("Hello World (pid:%d)\n", (int) getpid());
  int rc = fork();

  if (rc < 0)
  {
    //fork failed
    fprintf(stderr, "fork failed\n");
    exit(1);
  }

  else if (rc == 0)
  {
    //child (new process)
    printf("Hello I am child (pid:%d)\n", (int) getpid());
  }

  else
  {
    //parent goes down this path (main)
    printf("Hello, I am parent of %d (pid:%d)\n",
            rc, (int) getpid());
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

在 Windows(powershell 和命令提示符)中,我得到以下信息:

Hello World (pid:1283)
Hello, …
Run Code Online (Sandbox Code Playgroud)

linux cygwin powershell linux-terminal cmd.exe

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

将接收参数 On/off 以启动/停止服务的 powershell 修改为检查服务是否打开(或关闭)并停止(或启动)的脚本

我从这里得到了这段代码,它根据收到的参数启动或停止蓝牙服务。

bluetooth.ps1 -BluetoothStatus On
Run Code Online (Sandbox Code Playgroud)

或者

bluetooth.ps1 -BluetoothStatus Off
Run Code Online (Sandbox Code Playgroud)

我想修改它,以便我可以使用简单的 ahk 键绑定在不带参数的情况下调用它:

#b::
Run, C:\Users\user\Desktop\bluetooth.ps1 
return 
Run Code Online (Sandbox Code Playgroud)

然后,脚本应该“自行”检查蓝牙是否打开或关闭,并执行必要的操作来更改状态:如果打开,则应停止蓝牙;如果打开,则应停止蓝牙。如果关闭它应该启动它。

[CmdletBinding()] Param (
    [Parameter(Mandatory=$true)][ValidateSet('Off', 'On')][string]$BluetoothStatus
)
If ((Get-Service bthserv).Status -eq 'Stopped') { Start-Service bthserv }
Add-Type -AssemblyName System.Runtime.WindowsRuntime
$asTaskGeneric = ([System.WindowsRuntimeSystemExtensions].GetMethods() | ? { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1' })[0]
Function Await($WinRtTask, $ResultType) {
    $asTask = $asTaskGeneric.MakeGenericMethod($ResultType)
    $netTask = $asTask.Invoke($null, @($WinRtTask))
    $netTask.Wait(-1) | Out-Null
    $netTask.Result
}
[Windows.Devices.Radios.Radio,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null
[Windows.Devices.Radios.RadioAccessStatus,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null
Await ([Windows.Devices.Radios.Radio]::RequestAccessAsync()) ([Windows.Devices.Radios.RadioAccessStatus]) | Out-Null …
Run Code Online (Sandbox Code Playgroud)

powershell bluetooth windows-10

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

Hyper-V 不通过 Powershell 使用 Get-vm -ExpandProperty NetworkAdapters 提供 Ubuntu Guest 的 IP

在 Windows 10 Pro PC (Win10ProPC#1) 中,我有一个 Ubuntu 18.04.02 LTS VM,是很久以前创建的。从那时起,我也一直在使用以下命令作为脚本的一部分。因此在Win10ProPC#1中运行以下命令

Get-vm -Name Ubuntu18.04.2LTS | Select -ExpandProperty NetworkAdapters
Run Code Online (Sandbox Code Playgroud)

退货

VMName           IPAddresses
------           ----------- 
Ubuntu18.04.2LTS {172.17.199.244, ffff::ffff:ffff:ffff:ffff}
Run Code Online (Sandbox Code Playgroud)

我最近在另一台具有相似规格的 PC 上重新创建了相同的环境 (Win10ProPC#2)。有一个小变化,Ubuntu VM 现在是 Ubuntu18.04.3LTS。但是在 Win10ProPC#2 中运行以下命令

Get-vm -Name Ubuntu18.04.3LTS | Select -ExpandProperty NetworkAdapters
Run Code Online (Sandbox Code Playgroud)

退货

VMName           IPAddresses
------           ----------- 
Ubuntu18.04.3LTS {}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,VM(来宾)都可以访问互联网,我可以从来宾操作系统内部找到 IP 地址。(虽然这确认了有一个 IP,但这不是我想要的。我需要从上面的命令获取 IP。)

问题是 Win10ProPC#2 中的 NetworkAdapters 中没有报告 IP 地址,而 Win10ProPC#1 中有一些。我需要使 Win10ProPC#2 能够获取虚拟机的 IP 地址。

两台电脑均使用最新的Windows 10 Pro版本(64位)。此外,两个虚拟机都有动态 IP 并使用“默认交换机”网络配置。在这两种情况下,脚本均由 Powershell“以管理员身份”运行。

我担心我错过了某个设置或配置,但我已经仔细检查了 HyperV 的所有设置并且都是相同的。有什么想法吗?

powershell hyper-v windows-10 hyper-v-manager ubuntu-18.04

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

如何通过cmd创建一个文件来填满磁盘?

我想填满磁盘以进行需要磁盘存储已满的测试。为此,我发现我可以使用带有以下命令的命令行:fsutil file createnew <filename> <filesize in bytes>. 结合fsutil volume diskfree <disk>找出当前有多少可用空间,到目前为止这很好,并且适用于用例。

现在我有一个问题,我能否以某种方式组合这些命令,以便它可以以某种方式“自动化”,我不必手动检查可用存储并相应地创建文件?

简而言之,能否以某种方式将 from 的输出fsutil volume diskfree与 of 的输入结合起来fsutil file createnew创建一个填满磁盘的文件?此任务是否存在 cmd(或电源外壳)中的“单行”解决方案?

有问题的操作系统是 Win10 Enterprise。

windows powershell cmd.exe

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

如果 PC 是笔记本电脑,则运行脚本

我发现这个 PS 脚本可以检查 PC 是台式机还是笔记本电脑

function Get-HardwareType {
    $hardwaretype = Get-WmiObject -Class Win32_ComputerSystem -Property PCSystemType
        If ($hardwaretype -ne 2)
        {
        return $true
        }
        Else
        {
        return $false
        }}
 
If (Get-HardwareType)
{
"$Env:ComputerName is a Desktop"
}
Else
{
"$Env:ComputerName is a Laptop"
}
Run Code Online (Sandbox Code Playgroud)

如果结果是“笔记本电脑”,我需要运行这个其他命令

Add-AppxPackage -Path ".\28671Petrroll.PowerPlanSwitcher_0.4.4.0_x86__ge82akyxbc7z4.Appx"
Run Code Online (Sandbox Code Playgroud)

否则跳过它。我怎样才能把它们结合起来?

编辑:

似乎我需要互联网连接才能完全安装该应用程序;没有互联网,只要我通过互联网连接运行该应用程序,该应用程序就不会启动。有人知道在没有互联网连接的情况下我需要做什么吗?或者这是不可能的?

powershell uwp

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