标签: powershell

如何在不使用括号的情况下在 powershell 中获取对象的属性?

我经常发现必须将命令括在括号中,然后使用属性访问运算符(点语法)来获取属性的值。这很烦人,因为当我只想继续输入我所在的位置时,我必须回到行的开头。当我在一组更大的管道命令中间时,这尤其令人讨厌。

例子

如果我有以下命令

Get-PSProvider FileSystem
Run Code Online (Sandbox Code Playgroud)

并且我想获得该Drives属性,我必须首先将整个命令括在括号中:

(Get-PSProvider FileSystem).Drives
Run Code Online (Sandbox Code Playgroud)

有没有更快的方法来获得单个财产的价值?

powershell

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

Powershell 访问路径被拒绝

我确定这已经被问了一百万次,但我不明白为什么我不能在 powershell 中运行这个简单的命令:

PS> new-item -path c:\users\me\desktop\testfolder -name (get-date).txt -value (get-date).toString() -itemtype file
Run Code Online (Sandbox Code Playgroud)

我永远收到以下错误:

New-Item : Access to the path 'C:\Users\Me\desktop\testfolder' is denied.

... PermissionDenied: ... UnauthorizedAccessException
... FullyQualifiedErrorId: NewItemUnauthorizedAccessError,Microsoft.PowerShell...
Run Code Online (Sandbox Code Playgroud)

反正,

我已经尝试了以下所有方法,但无济于事:

  • 以管理员身份运行 powershell(即“以管理员身份运行”)
  • Set-ExecutionPolicy RemoteSigned
  • 文件夹上的“takeown”
  • 将文件夹的安全设置设置为:“everyone > full control”
  • -力量

接下来我应该去哪里寻找答案?我是本地机器上的管理员。没有权利做一些像创建愚蠢的文本文件这样简单的事情,这是非常令人沮丧的......

拔头发...

windows powershell administrator command-line windows-server-2008-r2

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

如何在 Windows Server 2008 R2 上升级 PowerShell?

我在 Windows Server 2008 R2 中使用 Windows PowerShell 1.0。我已经在 Windows 8 中尝试过 PowerShell 3.0,对我来说它看起来不错。

现在的问题是:如何在 Windows Server 2008 R2 机器上升级 PowerShell?如果 3.0 对我不可用,那么有什么方法可以升级到最新的可用版本?


Name             : ConsoleHost
Version          : 2.0
InstanceId       : f0b6480c-be55-429d-a197-65604de5887e
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : en-US
CurrentUICulture : en-US
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace
Run Code Online (Sandbox Code Playgroud)

powershell

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

为什么我的 PATH 环境变量与命令提示符不同?

一些重要的背景:我的公司有一个通用的登录 VBS 脚本,它在登录时修改用户 PATH 环境变量,并允许我运行依赖于映射 DFS 文件共享的软件。我最近还在我的 Windows 7 Enterprise 机器上安装了 Windows Powershell SDK,并尝试尝试从 Powershell 命令行修改我的 PATH 环境变量。

在此之后,我注意到我无法再运行与这些登录 PATH 修改相对应的应用程序,并且环境变量编辑器 PATH 设置为与我'echo %PATH%'从命令提示符发出时显示的不同。

所以例如(简化),从环境变量编辑器(My Computer properties -> Advanced System Settings -> Environment Variables)我有

 C:\MyDir\; C:\MyOtherDir
Run Code Online (Sandbox Code Playgroud)

而当我'echo %PATH%'从命令提示符执行时,我得到:

 C:\MyDir\
Run Code Online (Sandbox Code Playgroud)

有没有其他人遇到过类似的问题,是否有某种解决方案?当我用谷歌搜索帮助时,我发现了这个:

(相关?)StackOverflow 线程

我突然想到,如果登录脚本是由我的 Explorer.exe 环境以外的其他东西启动的,那就是问题所在。但是,当我自己运行登录脚本时,命令提示符中的 PATH 没有改变。这与 PowerShell 有什么关系?我想念它是如何完全连接到该安装的。

windows-7 powershell command-line environment-variables

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

查找具有特定 AD 属性 NOT null 的 AD 用户

我正在寻找一个脚本/Powershell 命令,该命令将列出在 teletexterminalidentifier 属性中具有NULL值的所有 AD 用户,因此他们必须设置一个值。

默认情况下未设置此属性,但我们有一个修改此属性的应用程序(以包含十六进制字符串),因此我正在查找将此属性设置为某些内容的所有用户的列表。

谢谢!

powershell

13
推荐指数
2
解决办法
17万
查看次数

PowerShell ISE 控制台中的换行?

我有时会在 PowerShell ISE(Windows 8.1 上的 v4)中使用一些东西时编写很长的代码行。我发现它的控制台窗口在很多方面都有帮助,但我无法弄清楚如何让它包裹长行;当我只想使用键盘时,它让我使用鼠标。

截屏

有没有办法在 PowerShell ISE 中启用自动换行?如果失败,我可以使用键盘向左/向右滚动吗?

注意:这是一个独立于如何使用反引号 (`) 运算符将命令拆分成多行的问题。

powershell powershell-ise

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

为什么 Powershell 这么慢?

我试图用 PowerShell 做一个简单的事情,找到占用驱动器大部分空间的文件。我使用了ls+sort并且......对我来说花了很长时间。

有时我使用远管理器,与 PowerShell 相比,它看起来更快更稳定。

好吧,它是基于 .NET 的,但是 .NET 并没有那么慢。我希望看到轻量级和快速的东西!是控制台!

另一件事,我想IEnumerable在 PowerShell 中使用类似的东西来立即查看结果。有可能实现吗?在期待结果时它可能会有所帮助,因为有时我认为它只是闲逛。

编辑

我正在做类似的事情

ls -Recurse -ErrorAction SilentlyContinue | sort -Property Size | select -First 10
Run Code Online (Sandbox Code Playgroud)

我想这可能需要几天时间。

编辑

只是为了比较。

C# 代码花了我大约 2 分钟。当然它并不理想并且没有处理所有文件,但它至少处理了> 95%。

ls -Recurse -ErrorAction SilentlyContinue | sort -Property Size | select -First 10
Run Code Online (Sandbox Code Playgroud)

performance powershell

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

dot-sourcing 比仅仅读取文件内容慢吗?

我编写了一个 PowerShell 模块,它从不同的源文件(即每个函数一个 .ps1 文件)中提取函数定义。这使我们(作为一个团队)可以并行处理不同的功能。模块(.psm1 文件)获取可用的 .ps1 文件列表...

$Functions = Get-ChildItem -Path $FunctionPath *.ps1
Run Code Online (Sandbox Code Playgroud)

...然后遍历列表并通过点源引入每个函数定义:

foreach($Function in $Functions) {
  . $Function.Fullname                                     # Can be slow
}
Run Code Online (Sandbox Code Playgroud)

问题:我们注意到,完成的速度可能会有很大差异,大约 50 个源文件的时间从 10 秒到 180 秒不等,这取决于我们测试的机器。我们无法解释所用时间的巨大差异,并且相信我们已经控制了诸如机器类型、操作系统、用户帐户、管理员权限、PS 配置文件、PS 版本等变量。在同一主机上,相同的主机所用的时间可能会有所不同。用户从一天到下一天。

我们确实想知道这是否是磁盘访问的问题,并测试了我们从磁盘读取数据的速度。事实证明,运行Get-Content所有这些文件的速度非常快,我们在解决问题的方法中利用了这一点:

foreach($Function in $Functions) {
  Invoke-Expression (Get-Content $Function.Fullname -Raw)  # Is quick
}
Run Code Online (Sandbox Code Playgroud)

为什么通过点源添加这些函数比读取和执行文件内容慢得多?

performance powershell

13
推荐指数
1
解决办法
806
查看次数

Powershell Resize-VHD 未被识别为 cmdlet 的名称

我正在尝试使用Resize-VHDcmdlet,但这会导致以下错误:

PS> Resize-VHD -Path "C:\Container.vhd" -SizeBytes 20GB
    Error:
        Resize-VHD : The term 'Resize-VHD' 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
        + Resize-VHD -Path "C:\Container.vhd" -SizeBytes 20GB
        + ~~~~~~~~~~
            + CategoryInfo          : ObjectNotFound: (Resize-VHD:String) [], CommandNotFoundException
            + FullyQualifiedErrorId : CommandNotFoundException
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

powershell vhd

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

如何在 Powershell 中生成类似 Linux 的 `ls` 输出?

我不希望ls( Get-ChildItem)的输出在 Powershell 中是垂直的(一个文件一行)。我希望它是水平的(就像 Linux 中的表格)。在网上搜索后,我不知道该怎么做。

并且ls -n | Format-Table不起作用。它仍然是垂直的。

我的母语不是英语,所以请原谅我的一些语法错误。

windows powershell

13
推荐指数
3
解决办法
2万
查看次数