标签: powershell

为什么 PowerShell ISE 不将脚本变量隔离到脚本范围?

在 PowerShell 中,作用域应该防止脚本中的对象(变量、别名、函数等)影响全局环境。这在命令行中似乎可以正常工作,但在 ISE 中则不然。

这是控制台中的演示。我检查是否$x在全局范围内未定义,显示内容ScopeTest.ps1然后运行它,最后检查是否$x再次定义。正如预期的那样,$x仅在脚本范围内创建和使用,并且在脚本终止后不会在全局环境中持续存在。

在此处输入图片说明

在 ISE 中,如果使用控制台窗口调用脚本,这似乎确实有效。

在此处输入图片说明

但是,如果我实际使用“运行脚本”按钮或 F5,脚本中的变量将在完成后保留。

在此处输入图片说明

如果脚本假定它将从干净的环境开始(即:脚本中设置的任何变量不应该已经存在。),这会使编写和故障排除脚本有点困难。为什么 ISE 会以这种方式运行?

这个问题的答案稍微触及了这个话题,提到了“点源”,但我希望在这里得到更彻底的解释。此外,如果存在有关脚本在 ISE 中的运行方式与控制台中运行方式不同的原因的文档,也可以提供参考。

powershell

12
推荐指数
1
解决办法
5828
查看次数

Windows 10 - 虚拟桌面启动自动化

我在这方面找不到太多东西,所以我想我会在这里问:

我正在寻找一种在登录时创建多个虚拟桌面并在每个虚拟桌面中自动启动几个应用程序的方法。例如,我通常在每个桌面上都有一个 chrome 浏览器。然后我通常有一个开发虚拟桌面(sublime、pycharm、firefox 和其他一些东西),然后我有一个新闻/社交桌面(irc、slack、skype、gchat、evernote 和我的“阅读”列表,等等on),最后是一个带有 onenote 和其他一些应用程序的“workstuff”桌面。

我知道,在最坏的情况下,我可以创建一个宏来执行此操作,但我想知道 Windows 中是否有任何额外的控件可以让您管理多个桌面,因为我认为如果我可以拥有我的工作、开发和社交功能,那将是不可思议的等。重新启动后,桌面会自动填充正确的应用程序,而不必每次都重做:)

感谢您的任何建议!

powershell virtual-desktop windows-10

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

无法通过 PowerShell 卸载通用应用程序

当我遇到障碍时,我正在从新的 Windows 10 安装中卸载所有通用应用程序。

这不是我第一次这样做,而且总是很顺利。但是,这一次,每当我用 PowerShell

Get-AppxPackage -allusers | Remove-AppxPackage

或更具体的东西编写时,

Get-AppxPackage -allusers *windowscalculator* | Remove-AppxPackage

我都会收到以下消息:

Remove-AppxPackage:部署失败,HRESULT:0x80073CFA,删除失败。请联系您的软件供应商。(来自 HRESULT 的异常:0x80073CFA)错误 0x80070032:AppX 部署从 Microsoft.WindowsCalculator_10.1605.1582.0_x64__8wekyb3d8bbwe 包中删除操作:C:\Program Files\WindowsApps\Microsoft.WindowsCalculator_10.1628d8bbwe 失败。

此应用程序是 Windows 的一部分,无法按用户卸载。管理员可以尝试使用打开或关闭 Windows 功能从计算机中删除该应用程序。但是,可能无法卸载该应用程序。

注意:有关其他信息,请在事件日志中查找 [ActivityId] 75c5fc31-fb20-0001-77fd-c57520fbd101 或使用命令行 Get-AppxLog -ActivityID 75c5fc31-fb20-0001-77fd-c575010f

在行:1 字符:49

+ Get-appxpackage -allusers *windowscalculator* | Remove-AppxPackage + ~~~~~~~~~~~~~~~~~~ + CategoryInfo : WriteError: (Microsoft.Windo...__8wekyb3d8bbwe:String) [Remove-AppxPackage], IOException + FullyQualifiedErrorId : DeploymentError,Microsoft.Windows.Appx.PackageManager.Commands.RemoveAppxPackageCommand


对于我尝试卸载的每个应用程序,我都会收到此消息,包括那些我知道可以完全卸载的应用程序,例如计算器或图像查看器,这在以前从未发生过。
Powershell 正在运行,其他一切正常,看起来很正常。

除了重新安装 Windows 之外,我还能做些什么吗?

powershell windows-store-app windows-10

12
推荐指数
2
解决办法
6万
查看次数

Powershell 静音 mkdir

有没有办法在没有详细输出的情况下在 powershell 中使用 mkdir(又名 md)?目前,输出如下:

PS C:\Users\myusername> mkdir foobar


    Directory: C:\Users\myusername


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2016-12-07   9:35 AM            foobar
PS C:\Users\myusername>
Run Code Online (Sandbox Code Playgroud)

除非有错误要报告,否则我希望它保持沉默,如

PS C:\Users\myusername> mkdir foobar
PS C:\Users\myusername>
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?我正在使用 Powershell 版本 2。

powershell mkdir

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

如何从 cmd 启动一个新的 cmd 实例并在其中运行命令?

我需要运行两个永不终止的命令。我通常做的是

  • 启动cmd终端并输入第一个命令
  • 启动另一个cmd终端并输入第二个命令

然后我让我的两个进程并行运行。

我现在想通过一个“启动”文件来自动执行此操作,该文件将启动上面的两个终端。它可以cmd基于 或 PowerShell。

注 1:我尝试使用cmdwith/k/c但这不会产生新的终端。尝试类似的东西cmd /c cmd最终Internal Error在 shell 中输出。

注 2: PowerShell 有后台作业。问题是我想要两个单独的外壳,我可以监视输出(并最终使用Ctrl-C.

有没有办法在一个文件中实现这一目标?

windows terminal powershell command-line cmd.exe

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

如何通过带有 WMI 的 Powershell 获取操作系统版本?

有谁知道如何获得这样的操作系统版本:

操作系统版本:1607

使用 Get-WmiObject?根本找不到这个 Informatin..

powershell wmi windows-10

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

如何在 Visual Studio Code 的 PowerShell 扩展中禁用 PSScriptAnalyzer 的 PSAvoidUsingCmdletAliases

我正在使用Visual Studio Code编写我的 PowerShell 脚本。

我已经安装了ms-vscode.powershellVisual Studio Code的PowerShell 扩展。

每当我在脚本中使用别名时,它都会PSScriptAnalyzer告诉我使用完整的 CmdLet 名称。这有点烦人,因为它还用绿色曲线标记所有别名。

我怎样才能禁用它?

see_screenshot_of_the_problem

powershell visual-studio-code

11
推荐指数
1
解决办法
4110
查看次数

如何检查 Windows 是否从命令提示符或 powershell 激活?

如果我想检查 Windows 是否已激活,但又懒得深入菜单系统,或者我使用的是没有桌面体验的 Windows 版本(例如服务器核心),我如何仅使用命令行?

windows powershell command-line windows-activation

11
推荐指数
2
解决办法
4万
查看次数

需要正则表达式才能找到单词“ERROR:”,但不匹配“ERROR: Opening Local File”

我正在用 PowerShell 编写一个错误检查脚本来查看 Bitvise SFTP 日志并在出现任何错误时发出警报。但是,我不希望它在字符串“错误:打开本地文件”上提醒我,因为这只是告诉我该文件已存在于目标中,这是预期的。我不太擅长正则表达式,除了我们可以忽略的错误之外,我似乎无法找到正确的元素组合来查找错误。

例子:

ERROR: Writing local file  (I want to be alerted to this)
ERROR: Opening local file  (I don't want to be alerted to this)
Run Code Online (Sandbox Code Playgroud)

powershell regex

11
推荐指数
2
解决办法
3255
查看次数

有没有办法让 Powershell 使用正斜杠而不是反斜杠来自动完成路径?

最近我一直在使用该wsl命令在 powershell 中运行 Linux (Ubuntu) 二进制文件和命令。

例如:

ls | wsl grep 'log'
Run Code Online (Sandbox Code Playgroud)

我试图使用 vim 打开一个名为 的文件.htaccess,但我不想输入该文件的全名。因此,我只是输入wsl vim .ht并按下 Tab 键以使 powershell 自动完成路径。这个自动完成wsl vim .\.htaccess看起来很好,但是当我按下 Enter 键时,vim 打开了一个名为..htaccess(注意附加句点)的新文件。就在那时我意识到它使用的是 Windows 的目录分隔符反斜杠而不是正斜杠。据推测,反斜杠刚刚逃脱了句点,这就是为什么在 vim 中它试图创建一个名为..htaccess.

我想知道是否有任何方法可以调整 powershell,以便它使用正斜杠而不是反斜杠来自动完成路径。我知道最近 Windows 可以理解并翻译正斜杠。

例如,此命令在 powershell 中运行:

cd C:/Windows
Run Code Online (Sandbox Code Playgroud)

尽管 Windows 使用反斜杠,这个命令仍然有效并将我带到了C:\Windows. 那么有没有办法让自动补全使用正斜杠呢?

windows powershell path command-line windows-subsystem-for-linux

11
推荐指数
1
解决办法
7383
查看次数