我正在尝试将Where-Object FilterScript 脚本块放入变量中,但到目前为止我还没有运气。作为我正在尝试做的事情的一个简单示例:
$test = @('one','two','three')
$filter = '$_ -eq "one"'
$test | Where-Object -FilterScript { $filter }
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用;我拿回了所有元素。我也尝试过:
$filter = { $_ -eq "one" }
$filter = [scriptblock]::Create($_ -eq 'one')
Run Code Online (Sandbox Code Playgroud)
这些都返回:
one
two
three
Run Code Online (Sandbox Code Playgroud)
但是,用实际过滤器替换变量可以按预期工作:
$test | Where-Object -FilterScript { $_ -eq "one" }
Run Code Online (Sandbox Code Playgroud)
这仅返回“一”,没有“二”和“三”。有谁知道我怎样才能做到这一点?我最初是在 Core v7.0.3 上尝试的,但也在 Windows PowerShell v5.1 上进行了测试。
我尝试使用 Powershell 创建一个带有可导出私钥的自签名 ssl 证书。我已经阅读并遵循了各种教程,但最终结果始终是没有导出任何私有内容。我使用 Powershell 是因为服务器运行的是 Windows Server 2016 Core 版本。我已尝试从远程计算机使用证书 MMC 控制台,但远程执行此操作时似乎并非所有功能都可用。无论如何,我遵循的各种教程都谈到了导出私钥的能力,但是我还没有找到使这项工作有效的代码的具体示例。这是我一直在尝试的代码:
$todaydt = Get-Date
$5years = $todaydt.AddYears(5)
$selfSignedRootCA = New-SelfSignedCertificate -DnsName SelfSignedRootCA -notafter $5years -CertStoreLocation Cert:\LocalMachine\My\ -KeyExportPolicy Exportable -KeyUsage CertSign,CRLSign,DigitalSignature -KeySpec KeyExchange -KeyLength 2048 -KeyUsageProperty All -KeyAlgorithm 'RSA' -HashAlgorithm 'SHA256' -Provider 'Microsoft Enhanced RSA and AES Cryptographic Provider'
New-SelfSignedCertificate -CertStoreLocation cert:\LocalMachine\My -DnsName "myserver.test" -notafter $5years -Signer $selfSignedRootCA -KeyUsage KeyEncipherment,DigitalSignature
$CertPassword = ConvertTo-SecureString -String "MyPassword" -Force -AsPlainText
Export-PfxCertificate -Cert cert:\LocalMachine\My\REDACTED-THUMBPRINT -FilePath C:\test.pfx -Password $CertPassword
Run Code Online (Sandbox Code Playgroud)
我的研究表明,最常见的原因是创建证书时使用的证书模板不允许导出私钥,因此按照这些建议,我复制了现有的证书模板并确保将其配置为允许导出密钥。但是,我不知道如何/在哪里在上述任何命令中指定新创建的模板。我对这些 cmdlet 的文档的审查没有显示任何这样做的参数。真的很坚持这一点,所以非常感谢任何建议。
powershell ssl private-key self-signed-certificate windows-server-2016
我正在寻找一种方式来运行的脚本1,当用户登录2 和,当他们注销3他们对4级的Windows 5机。
笔记:
我正在尝试安装 Powershell 2.0,它告诉我需要卸载早期版本?它不在已安装的应用程序列表中,并且在system32下的windowspowershell\v1.0目录中也没有明显的卸载。
在部署新版本的 ASP.NET 应用程序时,我们需要将特定页面的身份验证方法设置为“仅集成”。我们可以从 IIS 管理控制台执行此操作,但希望编写一个脚本(批处理或 powershell,无关紧要)来进行更改以确保部署中的一切顺利进行。
应用程序中的其余页面将允许不同的身份验证方法,但此特定页面仅允许集成。
在同一个部署中,我们还需要更改所有 401 错误的自定义错误页面的位置,最好也从命令行更改。
如何使用 powershell 调用远程命令。两台计算机都在同一个网络中,我可以从一台到另一台建立远程桌面连接。
编辑:两台机器都有Powershell V2,Windows Server 2008。
我尝试完成的任务是从第一台计算机重新启动第二台和第三台计算机上的Velocity。执行此操作的 Comandlet 是restart-cachehost.
我有一个连接到 LAN 网络的外部磁盘。
我想从脚本中查找磁盘上目录的磁盘使用情况。我查看了 power shell 和 SysInternals 工具,但找不到任何解决方案。有任何想法吗?
谢谢。
scripting windows powershell local-area-network disk-space-utilization
有谁知道如何在数千个子目录中搜索仅包含 1 个文件且不超过 1 个文件的所有目录?
关于使用什么工具或简单的代码片段的任何建议?
任何想法我在这里做错了什么?我从教程中复制了此脚本并收到此错误....
PS C:\Windows\system32> Get-Service | Where-Object ($_.status -eq "running")
Where-Object : Cannot bind parameter 'FilterScript'. Cannot convert value "False" to type "System.Management.Automation
.ScriptBlock". Error: "Invalid cast from 'System.Boolean' to 'System.Management.Automation.ScriptBlock'."
At line:1 char:27
+ Get-Service | Where-Object <<<< ($_.status -eq "running")
+ CategoryInfo : InvalidArgument: (:) [Where-Object], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.WhereObjectCommand
Run Code Online (Sandbox Code Playgroud) 我已经在 Windows 2003 服务器上安装了 PowerShell 1.0 版。如何在登录或注销事件期间运行 PowerShell 脚本?我试过了
本地计算机策略>用户配置>Windows 设置>登录/注销脚本
但它似乎不起作用。
powershell ×10
scripting ×4
windows ×2
deployment ×1
iis ×1
iis-6 ×1
login ×1
perl ×1
private-key ×1
ssl ×1
windows-7 ×1