我使用 Chocolatey 包管理器安装了一些包。$PATH我不想将每个安装目录添加到 PATH 或我在 PowerShell中的变量中,而是希望创建一个目录并将符号链接放置到每个包的可执行文件中。我为以下软件包执行了此操作:
所有这些都运行良好。最近我安装了 VSCode 和 VLC,同样的方法不起作用。我使用此命令在 PowerShell 中创建符号链接:
New-Item -ItemType SymbolicLink -Path "vlc.exe" -Value "C:\Program Files\VideoLAN\VLC\vlc.exe"
我正在学习 PowerShell。
我想了解为什么 Windows 8.1 下 PowerShell 5.0 中的某些别名不起作用。
例如,这个命令单独工作:
Get-WmiObject -Class Win32_WinSAT
Run Code Online (Sandbox Code Playgroud)
但是在我$profile的如下定义时它不会:
Set-Alias -Name wei -Value 'Get-WmiObject -Class Win32_WinSAT'
Run Code Online (Sandbox Code Playgroud)
错误消息如下:
Run Code Online (Sandbox Code Playgroud)PS C:\> wei wei : The term 'Get-WmiObject -Class Win32_WinSAT' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At line:1 char:1 + wei + ~~~ + CategoryInfo : …
每当我通过内置 shell 或通过 ConEmu 打开 Powershell 提示时,Powershell 的内存使用量都非常高 - 通常约为 1.5 Gb。
以管理员身份打开更糟糕,它大约每秒在 1Gb 和 2Gb 之间跳跃。
从我的~/Documents/WindowsPowerShell/Microsoft.PowerShell_profile.ps1文件中删除所有内容无效。
运行[System.Gc]::Collect()将内存使用量降至约 30Mb,并且一直保持这种状态。
我怎样才能找出导致这种高使用率的原因?我能找到的大多数 Powershell 内存建议与运行脚本时的高使用率有关,而我的 shell 似乎什么都不做。
Windows 10,内部版本 1703。
当我nslookup从 PowerShell 脚本运行时,尽管查找成功,但我总是收到错误(输出到控制台):
PS C:\Windows\system32> $MyOutput = nslookup -q=SOA superuser.com
8.8.4.4 nslookup : Non-authoritative answer: At line:1 char:13
+ $MyOutput = nslookup -q=SOA superuser.com 8.8.4.4
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (Non-authoritative answer::String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Run Code Online (Sandbox Code Playgroud)
这似乎是由于答案不具有权威性造成的。对权威 DNS 服务器进行查找不会返回错误。
在我自己寻找解决方案的尝试中,我找到了这个SO answer。它建议使用Resolve-DNSName命令。不幸的是,这需要 Windows 8.1/Server 2012 R2 并且我的脚本将运行的一些系统是 Windows 7 时代。
用于解释 PowerShell 认为发生错误的原因的奖励积分!
如何使用Powershell查找属于哪个分区文件?想要使用它来查找作为访问路径安装的分区,因此它没有分配 DriveLetter。
在 Linux 中,我们可以使用以下命令来执行此操作:
df /path/to/some/file.txt
Run Code Online (Sandbox Code Playgroud)
我知道我们可以使用 Get-Partition 列出分区,使用 Get-Volume 或 Get-WmiObject win32_volume 列出卷,但是我无法找到一种简单的编程方法来查找特定文件所属的分区。
我创建了一个 powershell 配置文件,它修改提示以添加一些颜色(取决于诸如 git branch 之类的东西)
这看起来不错,直到我执行了一个控制台程序,比如 git,它也输出彩色文本。在此之后,Powershell 似乎决定逐字输出转义码。
用截图更容易理解:
这是我的 Powershell 配置文件:
function prompt {
"" + [char]0x001b + "[35m colorized >" + [char]0x001b + "[0m"
}
Run Code Online (Sandbox Code Playgroud)
是否有重新启用 ANSI 代码功能的技巧,或者这只是 Powershell 或 git 输出文本的一些怪癖?请注意,git 只是一个示例,我发现有几个程序将其搞砸了,但并非所有程序都如此。
例如,MSBuild 工作得很好。
我已经运行相同的 Windows 设置太久了。它变得很慢,我相信从头开始设置新设置会有所帮助。
阻止我这样做的一件事是 PowerShell 的CTRL+R历史,我广泛使用它。
如何导出,然后在重新安装 Windows 后导入此历史记录文件?
我想知道如何使用 Invoke-WebRequest 并启用 cookie 的注册。目前有一个使用 get/set 和 cookie 的站点,它由数千个页面组成。每个页面都包含下一页的 ID,我尝试做一个循环,循环运行并将我指向最后一页,但是因为 webrequest 不保留 cookie,它一直认为我仍然在第 1 页。
我怎样才能为 webrequest 启用 cookie 的存储,这样它就不会认为我还在那里?
我正在编写一组 PS 脚本来帮助设置和维护 Windows 开发环境。现在,我正在维护两个脚本文件,一个用于安装 Chocolatey 软件包,另一个用于升级相同的软件包。
这两个脚本非常简单,它们看起来或多或少是这样的:
# choco-install.ps1
choco install git
choco install VisualStudioCode
# ...
Run Code Online (Sandbox Code Playgroud)
# choco-upgrade.ps1
choco upgrade git
choco upgrade VisualStudioCode
# ...
Run Code Online (Sandbox Code Playgroud)
我想将这些合并到一个脚本中,对于每个包,如果未安装,将安装它,如果已安装,则升级包。我希望能够共享这些脚本,因此它们不得干扰用户可能已安装的其他 Chocolatey 软件包。
是否有一个内置的巧克力命令来完成这个,或者我可以使用的另一个 powershell 技巧?
在 PowerShell 6.0.1 中,开箱即用的行为是,当我Delete在插入符号不在行尾时按下,它会按预期删除插入符号上方的字符。但是,一旦我删除了该行的最后一个字符,它就会将插入符号移回一个位置。我觉得这很烦人,因为我不能再坚持Delete删除直到行尾。有没有办法改变它,使它的行为与我按下时一样EndDelete- 即它什么都不做?
我在 backspace 上看到Disable PowerShell beep,并认为也许还有我想要的设置,但在阅读PSReadLine cmdlet 上的文档后,我发现没有。
然后我查看了键绑定,然后跑去Get-PSReadLineKeyHandler检查Delete当前分配给什么,然后在代码库中搜索 DeleteCharPSReadLine,查看该函数的定义,并浏览类似的东西。我找到了DeleteCharOrExit,并运行Set-PSReadLineKeyHandler -Key Delete -Function DeleteCharOrExit它并没有退出“删除”进程 - 正如我从不清楚的文档评论中所假设的 - 它退出了PowerShell控制台进程......
我还发现了https://github.com/lzybkr/PSReadLine/issues/486,这表明它已被修复,但显然不是......
也许我需要注入一些自定义键绑定代码,如https://github.com/lzybkr/PSReadLine/blob/46d232c22ac3f24a95e32d773c594ad306dfc327/PSReadLine/SamplePSReadLineProfile.ps1#L257-L291?
powershell ×10
windows ×3
chocolatey ×2
alias ×1
command-line ×1
memory ×1
nslookup ×1
power ×1