小编Yor*_*ubs的帖子

禁止“尝试新的跨平台 PowerShell https://aka.ms/pscore6”

我不介意微软的营销,但是当我只想要一个干净的 PowerShell 提示时,这很烦人。有没有人找到一种方法可以在删除基本版权信息的情况下只抑制Try the new cross-platform PowerShell https://aka.ms/pscore6打开 PowerShell ?我用谷歌搜索了很多,但没有找到答案(我知道有一种方法可以抑制一切,但我只想摆脱那个 pscore6 广告)。Windows PowerShell, Copyright (C) Microsoft Corporation. All rights reserved.

console powershell

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

从 WSL 会话内部关闭或重新启动 WSL 会话

我希望能够重新启动 WSL 会话。这样做有点尴尬,因为 WSL 不使用 systemd,因此我们无法使用reboot. 在 WSL 会话中,我们可以运行任何 Windows 可执行文件:

boss@Asus: ~ $ wsl.exe -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2
  fedoraremix     Stopped         1
  Alpine          Stopped         1
  Ubuntu          Stopped         1
Run Code Online (Sandbox Code Playgroud)

因此,我们可以使用wsl.exe(你必须确保.exe在调用Windows命令时始终添加,否则它们将不起作用)来关闭当前正在运行的WSL会话wsl.exe -t Ubuntu-20.03,但问题是我不知道会话名称。

当我们在 WSL 会话中时,hostname情况有所不同,因此我不知道如何查找我所在的当前正在运行的会话的名称(也许是一个 Windows 进程命令,它告诉我正在运行哪个进程? )。

理想情况下,我希望命令等同于重新启动。我想这看起来应该是这样的:

  • 运行一个异步命令,该命令将在未来 5-10 秒内启动一个新会话,以允许前一个会话完全关闭(并且该会话终止时不会终止)。
  • 使用 终止当前正在运行的会话wsl.exe -t <my found name>
  • 几秒钟后,新会话将启动。

bash powershell windows-subsystem-for-linux

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

解决启动缓慢的 PowerShell 步骤

我的 PowerShell 控制台启动时间很慢(等待时间总是超过 5 秒),并且希望获得有关故障排除步骤的建议,以找出瓶颈可能在哪里?

我已经读过,对于运行脚本来说,-NoProfile对于防止模块等加载很重要,但一般来说,我们应该如何找出导致事情变慢的原因?我没有安装很多模块,我知道从 PowerShell 3.0 开始,模块只是在启动时引用而不是完全加载(模块只有在调用给定模块的函数时才完全加载),所以我无法理解为什么启动一个裸控制台需要 5 秒以上(我的 $profile 也是空的)。

关于调试控制台启动过程的各个步骤的任何建议将不胜感激?另外,是否可能存在一些 Microsoft 或第三方工具来调试控制台启动过程中的各个步骤以查找瓶颈?

console powershell startup

10
推荐指数
3
解决办法
6205
查看次数

'Ø' 字符叫什么以及它的用途是什么

我不认为我曾经需要输入这个字符"\xc2\xac",所以我想知道它叫什么、它的用途是什么以及为什么它出现在我的键盘上(我的英国键盘和欧盟键盘)?我认为它可能在 1970 年代有一些常见的功能,但我很好奇那可能是什么,因为我几乎完全确定,在超过 25 年的时间里,我从来没有需要键入这个字符来执行任何操作。我确实经常使用波浪号字符"`",但从不使用"\xc2\xac".

\n

我问这个问题的部分原因是我可能会将它用作 AutoHotkey 触发器,因为它对我来说似乎完全没用,但在我这样做之前我很好奇它可能有什么用途等。

\n

keyboard autohotkey special-characters

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

WSL,使用“wsl --exec &lt;cmd&gt;”或“wsl -- &lt;cmd&gt;”运行 linux 命令

wsl -h显示以下内容:

    --exec, -e <CommandLine>   Execute the specified command without using the default Linux shell.
    --   Pass the remaining command line as is.
Run Code Online (Sandbox Code Playgroud)

“不使用默认的 Linux shell”是什么意思(即,如果不是默认的 shell,它还会使用什么!?)?

此外,通过示例,我现在可以通过三种可能的方式ls从 PowerShell 提示符运行 Linux(即,这不会Get-ChildItem别名为ls,而是通过 WSL 的 Linux 命令):

PS C:\> wsl -e ls   # Alternatively,  wsl --exec ls
PS C:\> wsl -- ls
PS C:\> wsl ls
Run Code Online (Sandbox Code Playgroud)

但所有输出似乎都是相同的。您如何解释从 PowerShell 提示符运行 WSL Linux 命令的这三种方法之间的差异?

linux bash powershell windows-subsystem-for-linux

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

PowerShell 别名、PSScriptAnalyzer 和 VSCode

有没有办法抑制PSScriptAnalyzer突出显示alias警告?例如

'rm' is an alias of 'Remove-Item'. Aliases can introduce possible problems and make scripts hard to maintain. Please consider changing alias to its full content.
Run Code Online (Sandbox Code Playgroud)

PowerShell 中的别名非常有用。我有一个简单的规则:我只在脚本中使用合理的内置别名(我忽略奇怪的别名)。为什么?好吧,这些特定别名中的大多数现在已有 13 年历史并且从未改变过(PowerShell 1.0 于 2006 年 11 月 14 日发布)。例如,%orlscd99.99% 的情况下都是可靠的。我认为 99.99% 的可靠性就“足够好”了。可能对所有PowerShell StackOverflow 问题最重复的评论是“注意:不建议在 PowerShell 脚本中使用别名,因为它们可以更改! ”(我经常想知道不推荐?上帝?;-))

然而,PSScriptAnalyzer在 VSCode 中,所有别名都突出显示为问题,因此我当前的 7,000 行脚本有 488 个此类“问题”。有没有办法告诉PSScriptAnalyzer我我喜欢别名,我打算使用别名来获得更加简洁的代码、清晰度以及它们给我带来的大大提高的可读性,所以我不认为它们是问题

powershell aliases visual-studio-code psscriptanalyzer

6
推荐指数
1
解决办法
2443
查看次数

使用 PowerShell sls (Select-String) vs grep vs findstr

有人可以澄清与 grep 和 findstr 相比 sls (Select-String) 是如何工作的吗?

格雷普: grep <pattern> files.txt

sls:sls <pattern> files.txt (sls 的默认参数位置是模式然后是文件)

grep的例子:grep "search text" *.log ; cat *.log | grep "search text"

SLS的例子:sls "search text" *.log;cat *.log | grep "search text"

顺便说一句,所有 PowerShell Cmdlet 都不区分大小写,不像 Linux 工具通常总是区分大小写,但也有像 findstr 这样的旧工具也区分大小写,但是 findstr 可以在 PowerShell 中使用,并且可以在 sls 不区分大小写的情况下工作,例如:(Get-Service | findstr "Sec"这没有问题!),但是当我们尝试以类似的方式使用 sls 时,Get-Service | sls "Sec"我们什么也没得到(大概这失败了,因为 sls 处理字符串,但 Get-Service 返回一个对象,所以这是可以理解的 - 但是findstr 在做什么,因为它可以将输出视为字符串?)。

因此,我的想法是“好的,我需要将 Get-Service 的输出转换为字符串以与 PowerShell Cmdlets …

string console powershell

5
推荐指数
1
解决办法
2113
查看次数

PowerShell Gallery、NuGet Gallery、MSI、Snap-Ins

我对这里的差异感到很困惑,希望得到一些澄清。

我认为在 PowerShell 1.0 中,有模块(用 PowerShell 编写的命令)和管理单元(实现 cmdlet 和提供程序的动态链接库)。然而,由于模块可以包含模块中的 Cmdlet 和函数可以调用的 DLL,因此界限变得模糊,因此最终管理单元现在实际上是多余的。

然后是 NuGet 包,这似乎是某种包部署系统(由 Microsoft 构建??)。这不像 PowerShell Gallery 那样特定于 PowerShell,并且 NuGet 包可以将任何类型的功能部署到 Windows 系统。将 NuGet 视为 MSI 作为包部署方法的继承者是否正确?

因此,我们有 PowerShell Gallery(仅适用于 PowerShell 模块)和 NuGet(适用于任何内容,但也包含 PowerShell)。什么是包?它与 PowerShell 上下文中的模块的定义有何不同?

然后,我注意到 PowerShell 有*-Package*-ModuleCmdlet,因此您可以运行:

find-module *7zip*
find-package *7zip*
Run Code Online (Sandbox Code Playgroud)

此处返回相同的四个项目,但这些 Cmdlet 指向哪里?如果您运行的install-module是从 PowerShell Gallery 安装的模块,并且如果您运行的install-package是从 NuGet 安装的等效包(不是模块,而是一个包,无论是什么!)?

对上述内容的任何澄清将不胜感激,因为我发现很难找到所有这些东西是什么以及它们如何相互作用的明确定义(事实上,对我来说安装它们和安装它们的最佳方法是什么)保养)?

powershell module nuget

5
推荐指数
0
解决办法
601
查看次数

PowerShell 作业与启动进程

我制作了一个小诊断脚本,并将其保存在我的$profile. 在收集 CPU 名称时,我发现该命令大约需要 4 秒(Get-WmiObject -Class Win32_Processor).Name。所以我想我应该尝试 PowerShell Jobs,虽然我认为它们非常适合长时间的后台作业,但如果您只想快速获取后台的一小段信息,那么初始化时间会很尴尬(例如 2-3每个作业秒),所以我想在脚本的其余部分运行时使用 Start-Process 将值转储到临时文件中。我认为我这样做是正确的,但如果您运行此函数 3 或 4 次,您会注意到 CPU 名称未填充。

\n\n

\xe2\x80\xa2 使用这样的 Start-Process 是否是最佳选择,或者是否有人有更快的方法来在后台并行启动小作业?我知道有一种 .NET 方法可以做到这一点(但从我所看到的来看,它似乎超级复杂)?

\n\n

\xe2\x80\xa2 你知道为什么我的“等待文件创建并在访问它之前非零”经常失败吗?

\n\n
function sys {\n    $System = get-wmiobject -class "Win32_ComputerSystem"\n    $Mem = [math]::Ceiling($System.TotalPhysicalMemory / 1024 / 1024 / 1024)\n\n    $wmi = gwmi -class Win32_OperatingSystem -computer "."\n    $LBTime = $wmi.ConvertToDateTime($wmi.Lastbootuptime)\n    [TimeSpan]$uptime = New-TimeSpan $LBTime $(get-date)\n    $s = "" ; if ($uptime.Days -ne 1) {$s = "s"}\n    $uptime_string = "$($uptime.days) …
Run Code Online (Sandbox Code Playgroud)

console powershell

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

PowerShell,确定我们是在 Windows 10 还是 Windows 11 上运行

如果我在 Windows 10或Windows 11上运行以下版本测试,它们都会报告$Major为 10 和$Minor0,因此此测试不足以确定我们是在 Windows 10 还是 Windows 11 上运行。

[version]$OSVersion = [Environment]::OSVersion.Version
$Major = $OSVersion.Major
$Minor = $OSVersion.Minor

# Other ways to test:

# $OSVersion = [Version](Get-ItemProperty -Path "$($Env:Windir)\System32\hal.dll" -ErrorAction SilentlyContinue).VersionInfo.FileVersion.Split()[0]

# [version]$OSVersion = Get-CimInstance -Class Win32_OperatingSystem | Select-Object -ExpandProperty Version

Run Code Online (Sandbox Code Playgroud)

在PowerShell中,我们如何区分我们是在Windows 10还是Windows 11中运行?

powershell version windows-10 windows-11

5
推荐指数
1
解决办法
3414
查看次数