目前,当我在 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)
等。最好使用单衬,但不是必需的
我目前正在开发业务流程自动化软件,实际上用户操作是由机器人模拟的。我需要将一些信息传递到 Windows 7 的开始菜单,我想知道是否可以使用 powershell 脚本打开 Windows 开始菜单?因为机器人可以理解打开powershell的信息。请任何建议都会很好。
非 Windows 操作系统上的 PowerShell 历史记录保存文件位于何处?
我有一台远程 Windows 10 计算机,它作为 Linux (Debian 9) 的主机,在 VirtualBox 中以访客身份运行。VM 在网络桥接模式下运行,因此两个操作系统都有本地 IP 地址并且可以“看到”对方。我可以从本地计算机通过 SSH 访问来宾 Linux(它是 VPN 的一部分)。从访客中,我还可以通过 SSH 服务器(内置于 Windows 10 中)访问主机的命令提示符/bash/powershell。有时我需要能够从两个操作系统访问连接的 USB 设备。不一定要同时进行——一个接着一个就可以了。
通过 VirtualBox GUI(设备 -> USB 设备)在主机和来宾之间切换连接的 USB 设备非常简单。但是有没有办法从命令行执行此操作 - 无论是从主机还是从来宾,或者更好的是,从两者都进行?
我正在尝试找到一种方法,使用 powershell 或 Windows 原生的 cmdline 将 .cer 格式的证书转换为 .pem 格式。有谁知道如何做到这一点?
我有一本书中的以下示例代码:
#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) 我从这里得到了这段代码,它根据收到的参数启动或停止蓝牙服务。
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) 在 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 的所有设置并且都是相同的。有什么想法吗?
我想填满磁盘以进行需要磁盘存储已满的测试。为此,我发现我可以使用带有以下命令的命令行:fsutil file createnew <filename> <filesize in bytes>. 结合fsutil volume diskfree <disk>找出当前有多少可用空间,到目前为止这很好,并且适用于用例。
现在我有一个问题,我能否以某种方式组合这些命令,以便它可以以某种方式“自动化”,我不必手动检查可用存储并相应地创建文件?
简而言之,能否以某种方式将 from 的输出fsutil volume diskfree与 of 的输入结合起来fsutil file createnew创建一个填满磁盘的文件?此任务是否存在 cmd(或电源外壳)中的“单行”解决方案?
有问题的操作系统是 Win10 Enterprise。
我发现这个 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 ×10
linux ×3
windows-10 ×3
cmd.exe ×2
batch ×1
batch-file ×1
bluetooth ×1
command-line ×1
cygwin ×1
history ×1
hyper-v ×1
macos ×1
start-menu ×1
ubuntu-18.04 ×1
usb ×1
uwp ×1
virtualbox ×1
windows ×1
windows-7 ×1