我经常发现必须将命令括在括号中,然后使用属性访问运算符(点语法)来获取属性的值。这很烦人,因为当我只想继续输入我所在的位置时,我必须回到行的开头。当我在一组更大的管道命令中间时,这尤其令人讨厌。
如果我有以下命令
Get-PSProvider FileSystem
Run Code Online (Sandbox Code Playgroud)
并且我想获得该Drives属性,我必须首先将整个命令括在括号中:
(Get-PSProvider FileSystem).Drives
Run Code Online (Sandbox Code Playgroud)
有没有更快的方法来获得单个财产的价值?
我确定这已经被问了一百万次,但我不明白为什么我不能在 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)
反正,
我已经尝试了以下所有方法,但无济于事:
接下来我应该去哪里寻找答案?我是本地机器上的管理员。没有权利做一些像创建愚蠢的文本文件这样简单的事情,这是非常令人沮丧的......
拔头发...
windows powershell administrator command-line windows-server-2008-r2
我在 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) 一些重要的背景:我的公司有一个通用的登录 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)
有没有其他人遇到过类似的问题,是否有某种解决方案?当我用谷歌搜索帮助时,我发现了这个:
我突然想到,如果登录脚本是由我的 Explorer.exe 环境以外的其他东西启动的,那就是问题所在。但是,当我自己运行登录脚本时,命令提示符中的 PATH 没有改变。这与 PowerShell 有什么关系?我想念它是如何完全连接到该安装的。
我正在寻找一个脚本/Powershell 命令,该命令将列出在 teletexterminalidentifier 属性中具有非NULL值的所有 AD 用户,因此他们必须设置一个值。
默认情况下未设置此属性,但我们有一个修改此属性的应用程序(以包含十六进制字符串),因此我正在查找将此属性设置为某些内容的所有用户的列表。
谢谢!
我有时会在 PowerShell ISE(Windows 8.1 上的 v4)中使用一些东西时编写很长的代码行。我发现它的控制台窗口在很多方面都有帮助,但我无法弄清楚如何让它包裹长行;当我只想使用键盘时,它让我使用鼠标。

有没有办法在 PowerShell ISE 中启用自动换行?如果失败,我可以使用键盘向左/向右滚动吗?
注意:这是一个独立于如何使用反引号 (`) 运算符将命令拆分成多行的问题。
我试图用 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) 我编写了一个 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)
为什么通过点源添加这些函数比读取和执行文件内容慢得多?
我正在尝试使用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)
我该如何解决?
我不希望ls( Get-ChildItem)的输出在 Powershell 中是垂直的(一个文件一行)。我希望它是水平的(就像 Linux 中的表格)。在网上搜索后,我不知道该怎么做。
并且ls -n | Format-Table不起作用。它仍然是垂直的。
我的母语不是英语,所以请原谅我的一些语法错误。