标签: powershell

如何将通过 Chocolatey 安装的所有可执行文件的符号链接放置在特定目录中?

Chocolatey - PowerShell - 符号链接

我使用 Chocolatey 包管理器安装了一些包。$PATH我不想将每个安装目录添加到 PATH 或我在 PowerShell中的变量中,而是希望创建一个目录并将符号链接放置到每个包的可执行文件中。我为以下软件包执行了此操作:

  • 清洁工
  • 谷歌浏览器
  • 火狐
  • 所有这些都运行良好。最近我安装了 VSCode 和 VLC,同样的方法不起作用。我使用此命令在 PowerShell 中创建符号链接:


    New-Item -ItemType SymbolicLink -Path "vlc.exe" -Value "C:\Program Files\VideoLAN\VLC\vlc.exe"
    双击符号链接时,VLC(和 VSCode)都运行良好。有没有更好的方法来做到这一点(为什么这种方法不起作用)?

    powershell symbolic-link command-line chocolatey

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

    为什么这个 PowerShell 别名不起作用?

    我正在学习 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)

    错误消息如下:

    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          : …
    Run Code Online (Sandbox Code Playgroud)

    powershell alias

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

    打开 Powershell 提示时内存使用率高

    每当我通过内置 shell 或通过 ConEmu 打开 Powershell 提示时,Powershell 的内存使用量都非常高 - 通常约为 1.5 Gb。

    以管理员身份打开更糟糕,它大约每秒在 1Gb 和 2Gb 之间跳跃。

    从我的~/Documents/WindowsPowerShell/Microsoft.PowerShell_profile.ps1文件中删除所有内容无效。

    运行[System.Gc]::Collect()将内存使用量降至约 30Mb,并且一直保持这种状态。

    我怎样才能找出导致这种高使用率的原因?我能找到的大多数 Powershell 内存建议与运行脚本时的高使用率有关,而我的 shell 似乎什么都不做。

    Windows 10,内部版本 1703。

    memory windows power powershell

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

    PowerShell 中的 NSLookup 总是抛出 RemoteException 错误

    当我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 nslookup

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

    如何在Powershell中查找属于哪个分区文件?

    如何使用Powershell查找属于哪个分区文件?想要使用它来查找作为访问路径安装的分区,因此它没有分配 DriveLetter。

    在 Linux 中,我们可以使用以下命令来执行此操作:

    df /path/to/some/file.txt
    
    Run Code Online (Sandbox Code Playgroud)

    我知道我们可以使用 Get-Partition 列出分区,使用 Get-Volume 或 Get-WmiObject win32_volume 列出卷,但是我无法找到一种简单的编程方法来查找特定文件所属的分区。

    windows powershell

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

    在 Powershell 提示中使用 ANSI 转义码添加颜色,在执行一些控制台进程后失去意义,例如 git

    我创建了一个 powershell 配置文件,它修改提示以添加一些颜色(取决于诸如 git branch 之类的东西)

    这看起来不错,直到我执行了一个控制台程序,比如 git,它也输出彩色文本。在此之后,Powershell 似乎决定逐字输出转义码。

    用截图更容易理解:

    输出示例

    1. 是我运行 git 之前的输出,注意文本“colorized >”的彩色输出
    2. 是我运行git后的输出,注意转义码是逐字输出的

    这是我的 Powershell 配置文件:

    function prompt {
        "" + [char]0x001b + "[35m colorized >" + [char]0x001b + "[0m"
    }
    
    Run Code Online (Sandbox Code Playgroud)

    是否有重新启用 ANSI 代码功能的技巧,或者这只是 Powershell 或 git 输出文本的一些怪癖?请注意,git 只是一个示例,我发现有几个程序将其搞砸了,但并非所有程序都如此。

    例如,MSBuild 工作得很好。

    powershell

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

    如何导出 PowerShell 的 CTRL+R 文件?

    我已经运行相同的 Windows 设置太久了。它变得很慢,我相信从头开始设置新设置会有所帮助。

    阻止我这样做的一件事是 PowerShell 的CTRL+R历史,我广泛使用它。

    如何导出,然后在重新安装 Windows 后导入此历史记录文件?

    windows powershell

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

    在带有 cookie 的 powershell 中使用 Invoke-Webrequest

    我想知道如何使用 Invoke-WebRequest 并启用 cookie 的注册。目前有一个使用 get/set 和 cookie 的站点,它由数千个页面组成。每个页面都包含下一页的 ID,我尝试做一个循环,循环运行并将我指向最后一页,但是因为 webrequest 不保留 cookie,它一直认为我仍然在第 1 页。

    我怎样才能为 webrequest 启用 cookie 的存储,这样它就不会认为我还在那里?

    powershell

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

    如果已经安装了 Chocolatey 包,我如何升级它,如果没有,我该如何安装它?

    我正在编写一组 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 chocolatey

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

    如何防止删除键像退格键一样

    在 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

    keyboard-shortcuts powershell

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