Articles of PowerShell

在PowerShell中testing本地主机?

我有一个powershell脚本调用Get-WmiObject与-Credential 。 但是,如果我在本地机器上运行这个错误,则会出错: Get-WmiObject : User credentials cannot be used for local connections 添加一个if localhost逻辑来避免这个错误的正确方法是什么? 还是有更好的办法?

powershell:如何检查是否在远程机器上启用SMART

我试图获取远程计算机的磁盘信息,包括是否使用win32_diskdrive类在驱动器上启用了SMART。 这比我想象的更复杂。 尽pipe读取状态属性足够简单,但我发现Capabilities属性中有一些有趣的内容 – 即表示是否有“SMART Notification”的值。 除非命令在提升的安全上下文中运行,否则不会显示此值。 因此,例如,如果我运行(gwmi win32_diskdrive).Capabilities SMART值(10)不会出现在值的数组中,但如果我运行在它出现的提升的提示。 据我所知,你不能在一个提升的背景下运行一个winrm会话(我对cheesy schtasks hacks或者psexec没有兴趣)。 那么我试图将win32_diskdrive映射到MSStorageDriver_FailurePredictStatus类。 我想我必须这样做,因为即使SMART出现在Capabilities属性中,这并不一定意味着它的启用权限? 我将win32_diskdrive的PNPDeviceID属性映射到MSStorageDriver_FailurePredictStatus的InstanceName属性,但现在我的问题是,我不认为InstanceName属性是足够独特的这个工作。 例如这里是我的InstanceName: IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_0 它显示了接口types(IDE)型号(ST3250312AS)固件版本(JC47),我认为是某种types的唯一标识符( 5&350bf0c3&0&0.0.0 ),那么看起来像索引号(_0)。 当我谷歌5&350bf0c3&0&0.0.0它出现在驱动器上的一些信息,所以我不认为这个数字是唯一的。 这意味着唯一性是在没有包含在win32_diskdrive类的PNPDeviceID属性中的索引号中。 这是一个问题,因为我们的许多服务器有多个相同的磁盘。 我担心的是MSStorageDriver_FailurePredictStatus会代表多个磁盘: IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_0 IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_1 IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_2 win32_diskdrive的PNPDeviceID属性都是IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0 如何可靠地将从win32_diskdrive检索到的对象映射到MSStorageDriver_FailurePredictStatus或者通过远程会话以MSStorageDriver_FailurePredictStatus方式执行此操作? 编辑 : 那么看起来我反应过度了。 当我检查了一堆服务器,我发现InstanceNames \ PNPDeviceIDs是这样的: SCSI\Disk&Ven_TOSHIBA&Prod_MBF2600RC\5&354ecb35&0&000200_0 SCSI\Disk&Ven_TOSHIBA&Prod_MBF2600RC\5&354ecb35&0&000300_0 如果没有人能够肯定地证实这一点,那么在一天左右,我只会假设这个价值实际上是独一无二的,并将其标记为“答案”。

在Server 2012上安装Windows Management Framework 4.0(Powershell 4.0)失败

我一直在尝试在Amazon EC2上的Windows Server 2012实例上testingPowerShell Desired Stateconfiguration。 我从MS下载中心下载了Windows Management Framework 4.0: Windowspipe理框架4.0 http://www.microsoft.com/en-au/download/details.aspx?id=40855 当试图安装时,我遇到了以下错误: Windows更新无法安装,因为错误2148098050“该消息的签名者证书无效或未find。 (命令行:“C:\ Windows \ system32 \ wusa.exe”“C:\ Users \ Administrator \ Downloads \ Windows6.1-KB2819745-x64-MultiPkg.msu”) 代码签名的安装程序通常包含证书作为二进制文件的一部分。 我只需右键单击包并从MSU中手动提取证书,并将其安装在本地机器证书库中,以确保签名者是可信的。 当我试图再次安装该软件包时,我收到一个新的错误: Windows更新无法安装,因为错误2148073480“指定的algorithm无效”。 (命令行:“C:\ Windows \ system32 \ wusa.exe”“C:\ Users \ Administrator \ Downloads \ Windows6.1-KB2819745-x64-MultiPkg.msu”) 任何人都可以帮助解决上述问题?

如何让SCCM识别Powershell脚本完成的返回码?

我正在使用SCCM 2012应用程序部署来安装软件。 特定的安装types是脚本安装程序,因为SCCM不能正常执行exevalidation错误。 该脚本是powershell,并成功安装该软件,即使由SCCM执行。 问题是SCCM只能看到脚本完成时返回0。 我已经尝试了write-host , return , write-output ,只是一个与软重启代码的行项目。 由于应用程序执行日志捕获返回值为0,SCCM似乎没有人读取它们。 你如何从PowerShell输出返回代码,以便SCCM可以解释它们?

是否有提供PowerShell输出的AD工具版本,类似于Exchange工具?

Exchangepipe理工具将输出它们将执行(或刚刚执行)的确切PS命令。 是否有不同版本的AD工具(主要是AD用户和计算机)具有相似的function? 如果没有,这是Windows 8服务器的预期function?

Server 2012 Server Core未安装PowerShell

在服务器核心,重新启动powershell后突然没有安装,我该怎么做重新安装? 我没有设置远程pipe理,所以我不能用它来重新安装它。 “powershell”不被识别为内部或外部命令,可操作程序或batch file。

哪个版本的Windows默认安装了powershell?

正如标题所说。 我刚刚安装了XP SP2,我期待安装PowerShell 1.0; 但是,事实并非如此。 看来我必须手动安装它。 如果我升级到SP3,我会得到PowerShell。 维基百科条目 : PowerShell 1.0在2006年发布了Windows XP SP2,Windows Server 2003和Windows Vista。 它是Windows Server 2008的可选组件。 PowerShell 2.0与Windows 7和Windows Server 2008 R2集成,针对Windows XP Service Pack 3,Windows Server 2003 Service Pack 2和Windows Vista Service Pack 1发布。 看来PowerShell 1.0或2.0在XP SP3,2003和Vista中默认没有安装。 我无法find任何具体的信息,请有人确认。

在什么情况下运行SCCM Powershell检测脚本?

使用AllSigned执行策略在客户端上使用PowerShell检测脚本终于成功了。 (提示:在安装最新的服务包并使用Adam Meltzer的解决方法之后,它开始工作。) 现在,使用PowerShell脚本进行应用程序检测是非常实用的,这让我很想知道以下几点: SCCM客户端在什么情况下运行PowerShell检测脚本? 系统? 用户? 上下文依赖于是否在部署types中select“为用户安装”或“为系统安装”? 文档在这个主题上相当稀less。 我发现的SCCM PowerShell检测脚本的最佳资源是Kloud博客文章 ,但在上下文中没有提到 。

使用Powershell查询schtasks

在Windows7机器上,我正在尝试使用schtasks.exe来运行查询来查看所有计划的任务 这很好,但我也想过滤使用类似的结果集 schtasks /query | where { $_.TaskName -eq "myTask" } 问题是我不这schtasks返回一个正确的格式化列表的wherefunction工作。 我也试过: schtasks /query /FO LIST schtasks /query | format-list | where …. 那些也不起作用。 使用Win7查询本地计算机上的schtasks并且能够过滤它们的最好方法是什么?

如何授予使用Powershell远程启动/停止服务的权限?

我们有一个PowerShell脚本来重新启动另一台计算机上的服务。 当我们使用PowerShell的内置服务控制cmdlet时,像这样: $svc = Get-Service -Name MyService -ComputerName myservicehostname Stop-Service -InputObject $svc Start-Service -InputObject $svc 我们得到这个错误: 停止服务:无法在计算机“myservicehostname”上打开MyService服务。 但是,当我们使用sc.exe时,就像这样: C:\Windows\System32\sc \\myservicehostname stop MyService C:\Windows\System32\sc \\myservicehostname start MyService 开始和结束成功。 重新启动的用户不是pipe理员。 我们使用subinacl授予用户启动/停止和查询服务的权限: subinacl.exe /service MyService /GRANT=MyServiceControlUser=STO 为什么PowerShell不能阻止我的服务,但sc.exe可以?