Articles of PowerShell

Powershell DSC使用不正确的证书文件进行encryption,其中节点名称部分匹配?

我认为DSCselect用于凭证encryption的证书文件(例如服务资源和PSCredential)的方式存在一个错误。 如果节点名称包含在后续节点名称中(节点顺序重要),则DSCconfiguration使用AllNodes集合中错误的CertificateFile。 这意味着发送给节点的encryption值可能是错误的。 这里有一个repro包括两个testing。 两个testing都会失败,但是第一个testing成功(带有错误的证书): $password = ConvertTo-SecureString "password" -AsPlainText -Force $serviceCredential = New-Object System.Management.Automation.PSCredential ("username", $password) $currentPath = Split-Path -Parent $MyInvocation.MyCommand.Definition $thisShouldNotWork = @{ AllNodes = @( @{ NodeName = "web1" CertificateFile = "nonexistentfile" }, @{ NodeName = "customerweb1" CertificateFile = "$currentPath\mycert.cer" } ); } $thisDoesNotWork = @{ AllNodes = @( @{ NodeName = […]

Powershell使用SQLPLUS执行查询

我有安装Oracle 10G的RHEL服务器。 我需要编写一个PowerShell脚本来查询我的数据库并获得输出。 我已经导入了Posh-SSH模块,并且能够连接到我的RHEL服务器并使用Invoke-SSHCommand执行命令,但是,我需要使用Invoke-SSHCommand来执行sqlplus命令。 通常情况下,我们可以使用EOF在perl中实现这一点,但是我们无法find任何方式使用PowerShell来完成这个任务。 使用EOF的Perl代码: $command="export ORACLE_SID=database sqlplus -S user/password<< EOF set feedback off select username from dba_users; EOF" 我的Powershell代码: $command="export ORACLE_SID=database sqlplus -S user/password<< EOF set feedback off select username from dba_users; EOF" $result = Invoke-SSHCommand -Index 0 -Command $command Write-Output $result 我的Powershell输出: Host : XX.XX.XXX.XXX Output : ExitStatus : 127 我猜,EOF字符可以被Powershell理解。 任何人都可以帮助我转换为PowerShell? […]

将HomePath设置为EmployeeNumber作为variables

我们计划使用AD中的EmployeeNumber用户属性来创build每个用户的主驱动器的path。 原因是AD用户名目前是以姓氏为基础的,而姓氏在我们的大型域名中经常发生变化。 我们希望摆脱pipe理名称更改。 将来,我们可能会将用户名转换为员工编号,但我们还没有。 目前我正在使用Powershell中的foreach循环来完成在AD中为每个用户设置path,但是我想调查也许使用组策略首选项,以便我可以在映射的驱动器上设置一个友好的标签。 然而,我很难将EmployeeNumber放入path中。 如何将EmployeeNumber属性作为variables获取到用户HomePath中?

“Please Wait”仅在Windows 8.1上运行启动脚本时

我有一个启动脚本,我一直在3个不同的虚拟机上进行testing。 这些机器运行不同版本的Windows(7,8和8.1)。 他们都有相同的组策略适用于我的域名。 在Windows 7和8计算机上,启动脚本似乎不支持login过程,并在用户login和使用计算机时在后台运行脚本。 在Windows 8.1机器上,我得到一个屏幕,上写着“Please Wait”,这似乎是脚本运行时显示的内容。 我希望Windows 8.1机器的行为与其他两个相同。 我究竟做错了什么? 这里是PowerShell脚本,但我怀疑这是问题: if (!(Test-Path -Path "$Env:ALLUSERSPROFILE\chocolatey" )) { Write-Host "Choco is not installed, installing now…" iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1')) } else { Write-Host "Choco is already installed, checking for chocolatey updates…" iex "$Env:ChocolateyInstall\bin\cup.exe -y" } if (!(Test-Path -Path "$Env:ProgramFiles\Puppet Labs\Puppet" )) { Write-Host "Puppet is not […]

远程位置pipe理复制并安装大型软件更新到50局域网

最初发布到堆栈溢出,并被指示在这里。 我是新手编程,正在尝试编写一个PowerShell脚本来pipe理软件更新。 我在一个拥有50多个远程办公室的Windows域环境中。 每个办公室有4台电脑。 一台计算机“计算机A”安装了Dropbox,用于备份和现在的软件更新。 我想从本地机器上执行一个脚本,将一个文件夹(〜1 GB)复制到该局域网中的其他计算机上,然后运行目录中的setup.exe文件来更新这些计算机上的软件。 据我所知,为了使用Enter-pssession cmdlet并运行复制项目和启动过程,我必须: 在远程机器上启用winrm:enable-psremoting -force 在远程计算机上启用CredSSP身份validation:enable-smancredssp -role server -force 在本地计算机上启用CredSSP身份validation:enable-SmanCredSSP -role client -force 从这里我可以进入Power shell会话并开始复制和安装。 这是我正在运行的代码: #Allow my computer to send credentials to remote computers Enable-WSManCredSSP -Role Client -DelegateComputer * -Force $credential = Get-Credential -Credential domain\user #Getting Content $path = "C:\computernames.csv" Import-Csv -path $path | foreach-object { $computername = […]

Powershell IIS插件 – cmdlet不能正常工作

我几乎是Powershell的新手,所以忍受着我的低调。 我特别试图运行“Get-WebBinding”cmdlet(我已经成功运行在其他一些服务器上) Windows Server 2008 R2 Standard: Get-PsProvider 显示Webpipe理模块未加载 Import-Module WebAdministration 发生错误。 “无法加载,因为脚本的执行被禁用…..” Get-ExecutionPolicy 输出是“限制” Set-ExecutionPolicy RemoteSigned 证实与是。 Import-Module WebAdministration 发生错误。 “…跳过,因为它已经存在” Get-PsProvider 显示Webpipe理现在已安装 Get-WebBinding (我真的想运行的cmdlet) 另一个错误。 “未find” 任何想法,为什么这个cmdlet不会运行?

PowerShell脚本在Windows事件日志中产生大量的警告

我有一个相当复杂的Windows Server 2008 R2上运行的PowerShell脚本。 在ISE中或在控制台中执行脚本时,一切运行良好。 没有错误或其他任何突出的东西。 但是,在Windows事件查看器中,很多警告正在生成,没有任何特定的原因,我可以看到。 Log Name: Microsoft-Windows-PowerShell/Operational Source: PowerShell (Microsoft-Windows-PowerShell) Event ID: 4100 Task Category: Executing Pipeline Error Message = System error. Context: Severity = Warning Host Name = Windows PowerShell ISE Host Host Version = 4.0 Host ID = cec010f3-ea0f-44b0-8d2e-449a6c1eb3e6 Engine Version = 4.0 Runspace ID = b2e8d39c-4fa1-4a3f-b33e-b42f8b552c3d Pipeline ID = […]

如何应用xNetworking xIPAddress所需的状态configuration(DSC)?

使用Windows Server 2012 R2。 目标是设置服务器的IPv4地址。 正如DSC在下面的详细消息中正确指出的那样,Expected [ip是] 192.168.0.203,[while] actual [ip is] 192.168.0.205 以下错误消息: Start-DscConfiguration -Path .\BasicServer -Verbose -Wait -Force VERBOSE: Perform operation 'Invoke CimMethod' with following parameters, ''methodName' = SendConfigurationApply,'className' = MSFT_DSCLocalConfigurationManager,'namespaceName' = root/Microsoft/Windows/DesiredStateConfiguration'. VERBOSE: An LCM method call arrived from computer ComputerName with user sid S-1-5-21-139086020-2308268882-217435134-1104. VERBOSE: [ComputerName]: LCM: [ Start Set ] VERBOSE: […]

允许在Exchange服务器上执行Powershell脚本发送邮件 – 最佳实践?

我有一个多angular色Exchange 2010服务器,需要按月计划执行Powershell脚本。 我真的想在任务结束时通过电子邮件发送一份报告给当地公司的邮箱。 我创build了一个具有所需权限的服务帐户,并且编写了一个Powershell脚本,当以服务帐户运行时,除了电子邮件报告部分之外,这些脚本都做得很好。 将我的Exchange服务器的IP添加到匿名允许的接收连接器听起来并不合适,也许有一种最佳做法来做到这一点? 任何意见都非常感谢! 更新: 至于脚本的邮件部分,通常我使用这样一个.NET Net.Mail.MailMessage对象: $SmtpServer = "exchangeserver.corp.company.com" $Msg = New-Object Net.Mail.MailMessage $Smtp = New-Object Net.Mail.SmtpClient($SmtpServer) $Msg.From = "[email protected]" $Msg.ReplyTo = "[email protected]" $Msg.To.Add("[email protected]") $Msg.Subject = "Monthly script execution report" $Msg.Body = "Everything's ok, some statistics etc." $Smtp.Send($Msg) 当我使用这个代码的时候,Exchange服务器会回答“服务不可用”。 对我来说这是有道理的,因为没有configuration接收连接器。 标准Send-MailMessage Powershell命令提供相同的结果,所以问题不在代码中,实际上在非Exchange服务器上工作正常。 目前我有三个接收连接器: 一个用于FQDN的外部邮件mail.company.com接受端口25上的连接 一个用于在标准SSL端口587上使用FQDN exchangeserver.corp.company.com的内部Exchange客户端 一个用于通过Exchange发送邮件的本地服务器列表,而不通过端口25上的FQDN exchangeserver.corp.company.com进行身份validation(不是一个完美的解决scheme,我不希望将我的Exchange服务器的IP添加到列表中) 所以我正在寻找一个安全可靠的方法,使其工作,在此先感谢!

在PowerShell中获取组策略标识符

我们的一些计算机有一个随机的“本地组策略”被设置,迫使他们检查一个不存在的内部网服务器的Windows更新,而不是在互联网上使用WU,因为他们应该。 这只发生在某些随机的,不相关的电脑上。 简单地在本地修复设置不能解决问题,因为即使这是本地策略而不是域名,计算机重新启动时,该值也会重置。 所有受影响的计算机都运行Windows 7 Enterprise,这是32位和64位的组合。 解决方法是删除C:\Windows\System32\GroupPolicy\gpt.ini ,然后手动设置值; 这工作。 我想编写一个快速脚本来自动执行此操作,但是相应的registry项位于以下registry位置: HKCU\Software\Microsoft\Windows\CurrentVersion\Group Policy Objects\{EXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}Machine\Software\Policies\Microsoft\Windows\WindowsUpdate 中间的标识符在每台计算机上都是不同的,我还没有弄清楚它是什么。 这不是用户或计算机的AD GUID,我不知道还要检查什么。 如何以编程方式(PowerShell)确定标识符是什么,以便可以在脚本中使用自动编辑registry项?