标签: powershell

在 WSUS 中批准或批准可选安装有什么区别

我一直在深入研究 Powershell,寻找更好地处理 WSUS 的方法。我注意到更新提供了 Approve 或 ApproveForOptionalInstall 选项。

虽然我可以找到很多关于如何执行此操作的文章,但我真的不知道为什么我会选择其中之一。

当我通过 WSUS GUI 批准时,只有批准选项,您可以选择将其安装在客户端上或隐藏它。我怀疑组策略规则(例如,如果空闲处于活动状态时强制重启)它可能会做一些与我在我的环境中观察到的不同的事情,但我现在猜测。

另外,WSUS 中的批准对应哪个选项?

powershell wsus

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

DSC-Resource:如何删除注册表项(不是值)?

我知道我可以通过使用以下脚本块来确保特定注册表值的存在:

    Registry ConfigureRegistry
    {
        Ensure    = 'Present'
        Key       = 'HKEY_LOCAL_MACHINE\SOFTWARE\SomeKey'
        ValueName = 'MachineType'
        ValueData = 'Hyper-V'
    }
Run Code Online (Sandbox Code Playgroud)

但是如何删除注册表项SomeKey?如果我只将关键字更改Ensure = "Present"为Ensure = "Absent"它会留下密钥SomeKey......

powershell dsc

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

有没有办法判断机器在安全组中的时间?

计算机被添加到安全组以防止它们获得 GPO。我希望机器在加入组 30 天后被移除。理想情况下,我还希望能够生成关于组中机器的报告。

就像是:

MachineA - 还剩 10 天

MachineB - 还剩 29 天

windows powershell active-directory group-policy

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

由 Start-Process Cmdlet 调用时,批处理脚本未执行

我在这里的 Windows Server 2012 R2 上有一个奇怪的问题,对我来说根本没有任何意义。

我有一个 PowerShell 脚本,它基本上具有以下结构:

Function Something-Different
{
    [...]
}

Function Start-Some-Batch
{
    Start-Process "K:\Path\To\Batch.cmd" 
}

Function Something-Else
{
    [...]
}

Something-Different
Start-Some-Batch
Something-Else
Run Code Online (Sandbox Code Playgroud)

但是批处理文件K:\Path\To\Batch.cmd永远不会被执行!

更多信息和事实:

  • 所有操作均由同一域用户执行
  • PowerShell 版本为 4.0
  • 在 Windows 资源管理器中双击批处理文件可以毫无问题地执行它
  • PowerShell 脚本不提供任何错误输出
  • 执行Start-Process "K:\Path\To\Batch.cmd"直接从PowerShell控制台的确也没有提供任何输出也不踢批处理脚本
  • $error[0] 执行后为空
  • 该函数Something-Else执行得很好(这意味着Start-Some-Batch不会阻止 PS 脚本完成其执行)
  • 运行提升的 PowerShell 脚本不会改变任何事情
  • 从 cmd.exe 提示符调用批处理脚本也不会启动它(提升与否)
  • 我怀疑Security Settings通过组策略来的一百个中的任何一个

什么会导致这种奇怪的行为?我在这里没有想法了。

powershell batch-file windows-server-2012-r2

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

Win32_OperatingSystem.FreePhysicalMemory 和 $_.TotalVisibleMemory 以错误的单位输出

我一直在编写一个非常简单的脚本来监控我们终端服务器场使用的某些方面,并且正在实施一个部分,我在其中检查给定时间点服务器上的内存使用情况。这是我用来获得的特定部分:

<#Modified to troubleshoot this particular section; defined $TermSvr and pipe output directly to   
host:#>
$RemoteSvr = "Win10Test"

#Check current Memory Usage and Available Space
$SysMem = Get-WmiObject Win32_OperatingSystem -ComputerName $RemoteSvr
"$RemoteSvr has {0:#.0} GB free space out of {1:#.0} GB total available memory" -f   
($SysMem.FreePhysicalMemory/1GB),    
($SysMem.TotalVisibleMemorySize/1GB) | Write-Host
Run Code Online (Sandbox Code Playgroud)

这输出:

Win10Test has **.0** GB free space out of **.0** GB total available memory
Run Code Online (Sandbox Code Playgroud)

但; 当我将 ($_.SysMem.TotalVisibleMemorySize/ 1GB ) 更改为 ($_.SysMem.TotalVisibleMemorySize/ 1MB )

它输出:

Win10Test has 1.1 GB free space out …
Run Code Online (Sandbox Code Playgroud)

powershell wmi

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

如何使用 PowerShell 在 IIS 中创建和安装域签名证书?

在我的环境中,我们在 IIS(在 Windows 2008 R2 和 Windows 2012 上)中托管了大量网站和 WCF Web 服务。

我们正在这些网站上启用 HTTPS。这如下:

  • *.environment.domain使用我们网络中可用的 Active Directory 证书颁发机构,在 IIS 中创建域签名证书。
  • 通过更改站点绑定并应用生成的证书,在站点上启用 HTTPS。

鉴于机器和站点的数量,我们希望自动化所需的操作。我可以在部署期间将正确的站点绑定应用到站点,但我还没有找到在 IIS 中创建和安装域签名证书的解决方案。

我已经找到了如何手动执行此操作,使用 IIS 中的“服务器证书”图标,并在那里调用“创建域证书”操作。我可以提供正确的凭据,并且当我指定证书颁发机构时,我可以创建所需的证书。

我还发现您可以使用cert:\PowerShell 驱动器查看机器中安装的证书:

cert:\LocalMachine\My> Get-ChildItem
Run Code Online (Sandbox Code Playgroud)

我发现在 Windows Server 2012 上有一个New-SelfSignedCertificatePowerShell CmdLet 可用。

但是,我似乎找不到在 Windwos Server 2008 R2 上组合所有这些操作所需的 PowerShell 突击队员。

如何使用 PowerShell 在 IIS 中创建和安装域签名的 SSL 证书?

powershell iis-7 iis-7.5 windows-server-2008-r2 ad-certificate-services

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

Search-ADAccount :: 查找不活动、禁用或过期的帐户

该Search-ADAccountcmdlet 具有开关-AccountDisabled,-AccountExpired和-AccountInactive; 其结果可能既不相互排斥也不包括在内。

即,如果我们的时间跨度为 -90 天,昨天被禁用但仅处于非活动状态 1 周的帐户可能不会显示为禁用。相反,尚未禁用但有一段时间未使用的帐户将显示为不活动但未禁用。

有没有办法使用这些开关来列出所有禁用、过期的OR非活动帐户;还是我必须运行三个查询然后| select * -unique删除重复项?

powershell active-directory

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

解除分配的 Azure VM 丢失 IPv4 DNS 地址

我每天晚上都取消分配我的开发 Azure VM 以节省我的积分。我的虚拟机都在一个使用域控制器的 vnet 上。由于它在子网上,域控制器地址永远不会改变。

每天当我启动我的 VM 时,我必须将我的网络适配器配置为“使用以下 DNS 服务器地址”作为我的 IPv4 DNS 首选地址。我想使用在启动时运行的脚本来自动执行此操作。

我可以使用以下方法设置此属性:

netsh interface ipv4 set dns "Local Area Connection 138" static 10.0.0.4
Run Code Online (Sandbox Code Playgroud)

但是,这不会起作用,因为每次启动时本地连接编号都会增加。我已经接近使用以下方法获取本地连接名称:

wmic.exe nic where "NetConnectionStatus=2" get NetConnectionID
Run Code Online (Sandbox Code Playgroud)

但这会返回列标题并且不能使用。返回值如下所示:

NetConnectionID
Local Area Connection 138
Run Code Online (Sandbox Code Playgroud)

所以我的问题是如何在启动时设置动态本地连接的首选 DNS 地址?

powershell netsh azure

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

在 Powershell 中排队重新启动

我正在做一个重启大量计算机的项目。重要的要求之一是分阶段重新启动,这样所有机器都不会立即重新启动(太快会导致 SAN 出现问题)。

我尝试通过限制到 50 个并行操作并添加 15 秒延迟(每分钟 200 次重新启动)来在工作流中执行此操作。

workflow Bounce-Computer {
param(
[string[]]$Computers
)
foreach -parallel -throttlelimit 50 ($computer in $Computers) {
    Restart-Computer -PSComputerName $computer -Force
    Start-Sleep -Seconds 15
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我遇到了一个问题,如果目标计算机上的 WMI 被破坏,工作流就会挂起。

除了在所有目标机器(有几千台)上修复 WMI 之外,我将如何以受控方式执行此类操作?工作?

powershell

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

似乎 KB3057134 中描述的更新使 PowerShell 启动缓慢

从今天早上开始,即使在我的机器上启动非常简单的 PowerShell 脚本也需要 3-4 秒。此命令在我的机器上显示 3.2-3.4 秒,而在同事的机器上仅显示 0.4 秒。

powershell ( Measure-Command { powershell "Write-Host 1" } ).TotalSeconds
Run Code Online (Sandbox Code Playgroud)

我知道有数以千计的可能原因(包括病毒!)...但我没有在我的机器上看到任何可疑活动,而且我今天早上安装了一堆 Windows 更新,这是唯一的重大变化我的环境。

我想知道是否有人有同样的问题。

powershell

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