这些对话框可以通过控制面板手动访问,但我只想通过命令行或至少通过可直接打开它们的快捷方式文件来访问它们。我对控制面板和现代 Windows 设置程序的相互争斗感到非常沮丧。
我能够通过右键单击打印然后选择“创建快捷方式”来创建快捷方式文件,但运行此快捷方式会打开“打印队列对话框”。
控制面板以及 Windows 中的其他地方能够可靠地打开每个打印机的“首选项”和“属性”对话框,因此必须有某种界面,类似于这些界面。
这些对话框可以通过控制面板手动访问,但我只想通过命令行或至少通过可直接打开它们的快捷方式文件来访问它们。我对控制面板和现代 Windows 设置程序的相互争斗感到非常沮丧。
我能够通过右键单击打印然后选择“创建快捷方式”来创建快捷方式文件,但运行此快捷方式会打开“打印队列对话框”。
控制面板以及 Windows 中的其他地方能够可靠地打开每个打印机的“首选项”和“属性”对话框,因此必须有某种界面,类似于这些界面。
我最近安装了 Windows Terminal Preview,并已让 wt.exe 打开它。现在我希望它在从“开始”菜单、“运行”对话框或 Windows 资源管理器的地址栏启动 powershell.exe 时打开。
如何设置?
我正在尝试捕获并清理powershell-WhatIf
中文件重命名操作的参数输出。目标是删除输出的某些部分,但即使经过多次尝试,我还是无法让它工作。以下是我尝试过的方法:
Set-Location "C:\Path\To\Directory"
$Replace1 = 'Item: C:\Path\To\Directory\'
$Replace2 = 'What if: Performing the operation `"Rename File`" on target'
$Replace3 = 'Destination: C:\Path\To\Directory\'
$VarIvExp = "GCI -Path . -Filter *.pdf | Ren -New { `$_.Name -replace ' ', '_' -replace '-', '_' } -Whatif ;"
# Various attempts to capture and replace parts of the output:
Invoke-Expression $VarIvExp | % { ($_ 3>&1).Replace($Replace1,'').Replace($Replace2,'').Replace($Replace3,'') }
Invoke-Expression $VarIvExp.ToString() | % { ($_ 3>&1).Replace($Replace1,'').Replace($Replace2,'').Replace($Replace3,'') }
Invoke-Expression $VarIvExp 3>&1 | % { $_.ToString().Replace($Replace1,'').Replace($Replace2,'').Replace($Replace3,'') }
Invoke-Expression $VarIvExp.ToString() | % { ($_.ToString() 3>&1).Replace($Replace1,'').Replace($Replace2,'').Replace($Replace3,'') }
Invoke-Expression $VarIvExp.ToString() | % { $_ | out-string -Replace $Replace1,'' -Replace $Replace2,'' -Replace $Replace3,'' }
Invoke-Expression $VarIvExp | % { $_.ToString() | -Replace $Replace1,'' -Replace $Replace2,'' -Replace $Replace3,'' }
Invoke-Expression $VarIvExp 3>&1 | % { $_ | out-string -Replace $Replace1,'' -Replace $Replace2,'' -Replace $Replace3,'' }
Invoke-Expression $VarIvExp.ToString() | % { $_ | -Replace $Replace1,'' -Replace $Replace2,'' -Replace $Replace3,'' }
Invoke-Expression $VarIvExp | % { $_.ToString() | -Replace $Replace1,'' -Replace $Replace2,'' -Replace $Replace3,'' }
What if: Performing the operation "Rename File" on target "Item: C:\Path\To\Directory\SomeText I nº 001-SMSCBMRJ-20250222.pdf" Destination: C:\Path\To\Directory\SomeText__I_nº_001_SMSCBMRJ_20250222.pdf
What if: Performing the operation "Rename File" on target "Item: C:\Path\To\Directory\SomeText I nº 002-SMSCBMRJ-20250222.pdf" Destination: C:\Path\To\Directory\SomeText__I_nº_002_SMSCBMRJ_20250222.pdf
What if: Performing the operation "Rename File" on target "Item: C:\Path\To\Directory\SomeText II nº 001-SMSCBMRJ-20250222.pdf" Destination: C:\Path\To\Directory\SomeText_II_nº_001_SMSCBMRJ_20250222.pdf
What if: Performing the operation "Rename File" on target "Item: C:\Path\To\Directory\SomeText II nº 002-SMSCBMRJ-20250222.pdf" Destination: C:\Path\To\Directory\SomeText_II_nº_002_SMSCBMRJ_20250222.pdf
注意:我还尝试过直接在 上进行各种操作$Results
,但没有成功。以下是使用 进行的尝试$Results
...$Results.Replace('various attempts','')
Set-Location "C:\Path\To\Directory"
$Replace1 = 'Item: C:\Path\To\Directory\'
$Replace2 = 'What if: Performing the operation `"Rename File`" on target'
$Replace3 = 'Destination: C:\Path\To\Directory\'
$VarIvExp = "GCI -Path . -Filter *.pdf | Ren -New { `$_.Name -replace ' ', '_' -replace '-', '_' } -Whatif ;"
$Results = Invoke-Expression $VarIvExp
$Results = Invoke-Expression $VarIvExp.Replace( -Replace $Replace1,'' -Replace $Replace2,'' -Replace $Replace3,'')
$Results.ToString().Replace($Replace1,'').Replace($Replace2,'').Replace($Replace3,'')
SomeText I nº 001-SMSCBMRJ-20250222.pdf SomeText__I_nº_001_SMSCBMRJ_20250222.pdf
SomeText I nº 002-SMSCBMRJ-20250222.pdf SomeText__I_nº_002_SMSCBMRJ_20250222.pdf
SomeText II nº 001-SMSCBMRJ-20250222.pdf SomeText_II_nº_001_SMSCBMRJ_20250222.pdf
SomeText II nº 002-SMSCBMRJ-20250222.pdf SomeText_II_nº_002_SMSCBMRJ_20250222.pdf
为什么其中任何一个都会返回三个项目:
gci C:\tools\* -filter b*.jar -recurse |select fullname
gci C:\tools\b* -filter b*.jar -recurse |select fullname
gci C:\tools\briss-* -filter b*.jar -recurse |select fullname
gci C:\tools\briss-2* -filter b*.jar -recurse |select fullname
gci C:\tools\briss-2.* -filter b*.jar -recurse |select fullname
gci C:\tools\briss-2.0* -filter b*.jar -recurse |select fullname
FullName
--------
C:\tools\Briss-2.0\lib\bcmail-jdk15-1.46.jar
C:\tools\Briss-2.0\lib\bcprov-jdk15-1.46.jar
C:\tools\Briss-2.0\lib\Briss-2.0.jar
但其中任何一个都只能返回一个:
gci C:\tools\br* -filter b*.jar -recurse | select fullname
gci C:\tools\bri* -filter b*.jar -recurse | select fullname
gci C:\tools\bris* -filter b*.jar -recurse | select fullname
gci C:\tools\briss* -filter b*.jar -recurse | select fullname
FullName
--------
C:\tools\Briss-2.0\lib\Briss-2.0.jar
我以为我知道一些 powershell,但这没有意义。
我承认我有点自负:我在上面粘贴时删除了一段路径,以使其更短。我认为这样做没有什么区别。以下是实际效果的屏幕截图:
注意:我没有重新输入第一个 gci 命令,只是重新调用了它并在路径中添加了“r”。此外,由于我使用了制表符补全,因此路径没有输入错误。
我正在测试一些要包含在脚本中的东西,但这不是脚本的一部分。我在 Win11 中注意到了这一点,但我在干净的 Win10 VM 中重复了这一点。如果您使用 Chocolatey 并安装 Briss,您应该会得到完全相同的文件夹结构来自己测试。
我编写的 PowerShell 脚本必须尽可能兼容,因此在检查事物状态时,我总是更喜欢轮询枚举 ( 4
) 而不是字符串 ( Enabled
)。在 99% 的情况下,即使在本地化的 Windows 版本上,字符串值也保持一致,但总会有一台设备不一致,而这台设备就是运行我的脚本并给我带来麻烦的设备。只要我知道枚举映射到什么,这就可以了,但获取这些信息就像拔牙一样困难。
示例:服务
谷歌搜索“service state enum powershell”会将您带到此处,您可以看到一个漂亮的表格,其中列出了服务状态的值,这些值与您执行时获得的值一致(get-service 'xyz').status.value__
。这使我能够说
if ($value -eq 1)
与相反if ($value -eq 'enabled')
,这是一个更为可靠的比较。
同样,很好,如果您知道要搜索的术语。
实际问题
是是否有一些 PowerShell 命令或网站可用于列出这些value__
枚举?现在,我正在尝试查找state
值的枚举get-WindowsOptionalFeature
,但一无所获。当然,这不是故意要这么乱吧?我是自学成才的,所以我希望有一些知识库来存储这些东西,这些知识都是常识,而我只是略过了。
如何通过 PS1 PowerShell 脚本将带有变音符号(Ä、Ö、Å 等)的多个 Windows 11 用户添加到带有变音符号的组中?
我有一个这样的文件夹结构:
D:\fold1
subfold1
subfold2
file1
file2
D:\fold2
subfold_1
subfold_2
D:\fold3
subfold_a
subsubfold_i
subsubfold_ii
file_a
file_b
D:\fold4 [empty folder]
我想保留 fold1、fold2、fold3、fold4 并删除它们包含的任何子文件夹和/或文件。
对于少量的一级文件夹(fold1、fold2 等),我可以使用文件资源管理器,单击 fold1,然后在其内容中按 Ctrl+A -> 删除。fold2、fold3 等也一样。但是,有 600 多个一级文件夹,用这种方法操作会花很长时间。
我认为 powershell 是关键,但我不知道语法。
有人可以帮帮我吗?
在 powershell >= 5.1 下
我得到:
PS C:\> get-service -Status Running
Get-Service: A parameter cannot be found that matches parameter name 'Status'
但该财产确实存在吗?
PS C:\> get-service | Get-Member
PowerShell 安装程序在 Windows 10 上给出 2203 错误代码。我的权限配置正确。还有什么可能导致此错误?