Questions tagged «powershell»

Microsoft的交互式外壳程序,脚本和编程语言以及周围环境。PowerShell通常由管理Microsoft软件(包括Windows,Exchange,SharePoint和云服务Azure和Office 365)的系统管理员使用,默认情况下Windows附带了PowerShell,它接管了以前的语言(例如VB脚本)。

1
使用Powerhshell作为非管理员服务帐户的服务计划重新启动
在遭到拒绝之前,我知道如何安排任务,使用Powershell重新启动服务或为非管理员帐户提供重新启动服务的权限。那不是问题。但是,问题在于这三个任务的结合。 我有一个Windows服务,需要处理网络文件夹上的文件。因此,它使用实际上只是常规域帐户的“服务帐户”登录。该域帐户不是管理员,但具有对该文件夹的访问权限。该服务运行良好,可以正常工作。 但是,有时其中一个文件出现错误,导致无法处理其他文件。通常需要一段时间才能有人注意到,并且还有一些积压。 因此,我在Powershell中创建了一个监视脚本,该脚本轮询网络文件夹中是否有这些错误文件。如果找到它们,则将文件移动到临时文件夹中进行查看,并且需要重新启动服务。 我通过组策略为服务帐户授予了启动和停止服务的特权。 使用服务帐户登录服务器时,可以使用服务MMC手动重新启动服务。我还能够执行powershell脚本,它确实可以实现预期的功能:轮询文件夹,移动文件并重新启动服务。大! 在下一阶段,我创建了一个计划任务,该任务每10分钟运行一次。该任务使用与服务相同的服务帐户来执行Powershell脚本。选中“以最高特权执行”框。就像我说的那样,PowerShell脚本需要访问网络驱动器,所以我不能以本地服务器管理员身份运行它,并且我不想使用域管理员凭据来执行这样的重要任务。(我尽我所能实现最小特权原则。) 我使用本地安全策略MMC在本地服务器上为服务帐户授予了“作为批处理作业登录”权限。 现在,我无法弄清的部分是:在计划的时间,计划的任务成功完成,并且正在执行Powershell脚本。该脚本轮询文件夹,并且错误文件被移动。唯一不起作用的是重新启动服务...?!同样,以同一用户手动运行脚本也可以正常工作。 我在事件查看器中看不到太多内容,但是在脚本上登录时显示此错误: TerminateError(Stop-Service):“无法在计算机'。'上打开Service Control Manager。此操作可能需要其他特权。” 我用来重新启动服务的命令是: Stop-Service -Verbose -DisplayName $($service[1]) ... Start-Service -Verbose -DisplayName $($service[1]) (我在2008 R2域上使用Windows Server 2012 R2和Powershell版本4。) 更新: 我都试过,可以通过使用SUBINACL用户的服务权限(如描述这里)和手动设置SDDL字符串(如描述在这里),所以我的控制标志是这样的(A ;; CCLCSWRPWPDTLOCRRC ;;; S-1- X-XX-XXXXXXXXXX-XXXXXXXX-XXXXXXXXX-XXXX)。我还尝试在GPO中将服务的特权设置为“完全控制”。这些都没有解决问题。它必须我的使用权限问题的地方,我还是远眺,因为当我安排任务与在服务器上的本地管理员的域帐户,它工作得很好。

1
我可以在WSUS中更改更新说明吗?
在每个Microsoft补丁程序日,我都有大量要批准给客户的新更新。但是,我不是在“批准所有更新并继续”,而是在其知识库文章中收集有关每个更新的信息,以决定这是否对我们很重要。 这是一个非常繁琐的任务,因为我必须在客户端的浏览器中键入相应的KB编号,然后等待网页加载。我想知道为什么Microsoft不使用WSUS控制面板上的更新描述框来显示真正有用的详细信息。相反,我所有的更新均显示为: 安装此更新程序可以解决Windows中的问题。有关此更新中包含的问题的完整列表,请参阅相关的Microsoft知识库文章,以了解更多信息。安装此项目后,您可能必须重新启动计算机。 我开始考虑一个小的Powershell脚本,该脚本为我添加了必要的信息。但是我在第一步上失败了,第一步是手动更改更新描述: PS C:\ Users \ Administrator> $ wsus = Get-WsusServer PS C:\ Users \ Administrator> $ update = $ wsus.SearchUpdates('KB3013791') PS C:\ Users \ Administrator> $ update [0]。说明 安装此更新可解决Windows中的问题。有关此更新中包含的问题的完整列表,请参阅相关的Microsoft知识库文章,以了解更多信息。安装此项目后,您可能必须重新启动计算机。 PS C:\ Users \ Administrator> $ update [0] .Description ='“ 0x00000133”当Windows 8.1或Windows Server 2012 R2中的硬件出现故障时停止错误' PS C:\ Users …

1
SCCM Powershell检测脚本在什么情况下运行?
我终于在具有AllSigned执行策略的客户端上使用PowerShell检测脚本获得了成功。(提示:安装最新的Service Pack并使用Adam Meltzer的解决方法后,它开始工作。) 既然使用PowerShell脚本进行应用程序检测很实用,这使我想知道以下几点: SCCM客户端在什么情况下运行PowerShell检测脚本?系统?用户? 上下文是否取决于您在“部署类型”中选择“为用户安装”还是“为系统安装”? 关于此主题的文档很少。我为SCCM PowerShell检测脚本找到的最佳资源是这篇Kloud博客文章,但是,它对上下文没有任何评论。

1
Set-RDSessionCollectionConfiguration连接代理连接到本地主机
我正在Windows 8计算机上的PowerShell控制台上运行以下命令,尝试配置Server 2012 R2 RDS Connection Broker: Import-Module RemoteDesktop Set-RDSessionCollectionConfiguration -CollectionName "Example" -CustomRdpProperty "gatewayhostname:s:rdp.example.com" -ConnectionBroker "ep-ts01.ad.example.com" 但是,即使我指定要使用的连接代理,它也总是尝试连接到localhost: New-PSSession:[localhost]连接到远程服务器localhost失败,并显示以下错误消息:该线索无法连接到请求中指定的目标。验证目标服务器上的服务正在运行并且正在接受请求。请查阅在目标(通常是IIS或WinRM)上运行的WS-Management服务的日志和文档。如果目标是WinRM服务,请在目标上运行以下命令以分析和配置WinRM服务:“ winrm quickconfig”。有关更多信息,请参见about_Remote_Troubleshooting帮助主题。 但是,Get-RDSessionCollection -ConnectionBroker ep-ts01.ad.example.com可以正常工作并返回集合。 如果我Enter-PSSession ep-ts01.ad.example.com从那里开始运行它也是同样的故事。但是,如果我从服务器本身(即不是远程地)运行命令,则可以正常工作。 我怎样才能解决这个问题?

4
如何在Windows Powershell中区分两个文件夹?
我正在尝试使用Windows Powershell查找两个文件夹结构的内容差异。我使用以下方法来确保文件名相同,但是该方法不会告诉我文件的内容是否相同: $firstFolder = Get-ChildItem -Recurse folder1 $secondFolder = Get-ChildItem -Recurse folder2 Compare-Object -ReferenceObject $firstFolder -DifferenceObject $secondFolder 这个ServerFault问题中描述的技术适用于差异化单个文件,但是这些文件夹包含各种深度的数百个文件。 解决方案不一定需要告诉我文件中到底有什么不同-只是它们有所不同。我对元数据中的差异(例如日期)不感兴趣,我已经知道它们是不同的。
11 powershell  diff 

5
无法在Exchange 2010中授予“发送为”权限
我正在尝试向Exchange 2010中的一个用户授予“发送为”权限。这是我正在运行的Powershell命令: Add-ADPermission "User1" -User "Ourdomain\User2" -Extendedrights "Send As" Powershell返回此错误: Active Directory操作在DC.OurDomain.pri上失败。该错误不可重试。附加信息:拒绝访问。活动目录响应:00000005:SecErr:DSID-031521D0,问题4003(INSUFF_ACCESS_RIGHTS),数据0 + CategoryInfo:WriteError:(0:Int32)[Add-ADPermission],ADOperationException + FullyQualifiedErrorId:EDBB94A3,Microsoft.Exchange.Management.RecipientTasks。 AddADPermission 我已经尝试过Powershell命令的多种替代方法-即。使用-Identity等,但是与EMC向导都返回相同的错误。 我不确定“ INSUFF_ACCESS_RIGHTS”是指我正在运行命令的人还是授予我发送权限的用户? 我一直在关注Microsoft Technet的“管理邮箱的代理发送权限”网页:http : //technet.microsoft.com/zh-cn/library/bb676368.aspx 因此,添加了执行此操作所需的两个权限: 组织管理 收件人管理 但这无济于事。有任何想法吗? 更新资料 如果我执行以下操作: 使用“高级功能”视图打开“ AD用户和计算机” 转到用户1的属性 点击“安全”选项卡上的“高级” 选择“添加” 输入“ User2”并选择“发送为”允许 如果我关闭ADUaC并再次打开它,然后重新检查那些新权限,它们仍然存在,那行得通。如果我在大约10分钟后返回,这些权限现在就消失了-用户2根本不会出现在用户1的安全权限中。 不要以为我以前见过这种广告行为。

5
具有多个值的Powershell Switch语句
任何人都知道我如何拥有带有多个可能值的switch语句,例如下面的示例? switch ($myNumber) { 1 3 5 7 9 { write-host "Odd" } 2 4 6 8 10 {write-host "Even" } } 过去在VBScript中很容易,所以我确定我只是缺少一些简单的东西。 例如在VBScript中 Select Case myNumber Case 1,3,5,7,9 MsgBox "Odd" Case 2,4,6,8,10 MsgBox "Even" End Select 提前加油, 本
11 powershell 


2
为所有现有用户和所有新用户添加HKCU键和值的最佳方法?
我需要将HKCU键和值添加到特定OU中的所有计算机,所有现有用户配置文件和默认配置文件中。解决此问题的最佳方法是什么? 我可以枚举并遍历所有NTUSER.DAT,加载配置单元,添加键,然后卸载配置单元,但这似乎很笨拙。 有人有更好的主意吗?我想编写此脚本(最好是PowerShell)并在可能的情况下推送更改,但是组策略登录脚本也可以工作。

2
PowerShell性能差异过滤器与功能
我目前正在阅读Windows PowerShell 3.0循序渐进书,以获得对PowerShell的更多了解。 在第201页上,作者演示了过滤器比具有相同功能的函数要快。 此脚本在他的计算机上需要2.6秒: MeasureAddOneFilter.ps1 Filter AddOne { "add one filter" $_ + 1 } Measure-Command { 1..50000 | addOne } 而这4.6秒 MeasureAddOneFunction.ps1 Function AddOne { "Add One Function" While ($input.moveNext()) { $input.current + 1 } } Measure-Command { 1..50000 | addOne } 如果我运行此代码,则得到与他的结果完全相反的结果: .\MeasureAddOneFilter.ps1 Days : 0 Hours …
11 powershell 

3
如何将参数传递给函数?
我需要在PS脚本中处理SVN工作副本,但是在将参数传递给函数时遇到了麻烦。这是我所拥有的: function foo($arg1, $arg2) { echo $arg1 echo $arg2.FullName } echo "0: $($args[0])" echo "1: $($args[1])" $items = get-childitem $args[1] $items | foreach-object -process {foo $args[0] $_} 我想通过$arg[0]为$arg1对foo,和$arg[1]作为$arg2。但是,由于某些原因$arg1它始终为空,因此它不起作用: PS C:\Users\sbi> .\test.ps1 blah .\Dropbox 0: blah 1: .\Dropbox C:\Users\sbi\Dropbox\Photos C:\Users\sbi\Dropbox\Public C:\Users\sbi\Dropbox\sbi PS C:\Users\sbi> 注:该"blah"参数不为过$arg1。 我绝对确定这是一件非常简单的事情(我刚开始做PS时仍然感到很笨拙),但是现在我已经将头撞了一个多小时,而且我什么也找不到。
11 powershell 

5
如何通过Powershell为IIS APPPOOL \ *帐户添加ACL权限?
我希望能够为新网站设置IIS帐户以具有修改权限。我有以下脚本: function Set-ModifyPermission ($directory, $username, $domain = 'IIS APPPOOL') { $inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit" $propagation = [system.security.accesscontrol.PropagationFlags]"None" $acl = Get-Acl $directory $user = New-Object System.Security.Principal.NTAccount($domain, $username ) $accessrule = New-Object system.security.AccessControl.FileSystemAccessRule($user, "Modify", $inherit, $propagation, "Allow") $acl.AddAccessRule($accessrule) set-acl -aclobject $acl $directory } 但是,当我运行它时,出现如下错误: Set-Acl:此工作站和主域之间的信任关系失败。 我认为这是因为IIS APPPOOL它不是真实域名,而是假冒账户上的一个奇怪的前缀。有没有正确的方法来引用该帐户,以便我可以进行此工作?

3
将服务StartType设置为Automatic-Delayed
使用Set-Service,我可以StartType在的接受值之间更改我的服务Boot, System, Automatic, Manual, Disabled。使用services.msc,我可以将一些服务设置为优先级为Automatic (Delayed Start)。但是,Get-Service这些延迟启动服务仍报告为StartType : Automatic,并且Set-Service在尝试设置这些值时会出错。 我可以通过Powershell设置此属性吗?还是我仅限于UI 或GPO?

3
更改Powershell $ profile目录
我想知道如何更改$ profile变量指向的位置。 PS H:\> $profile H:\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 H:\是网络共享,因此当我创建配置文件并加载powershell时,我得到以下信息: 安全警告仅运行您信任的脚本。尽管来自Internet的脚本可能很有用,但此脚本可能会损害您的计算机。您是否要运行H:\ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1?[D]不要运行[R]一次运行[S]暂停[?]帮助(默认为“ D”): 根据Microsoft的说法,$ profile的位置由%USERPROFILE%环境变量确定。这不是真的: PS H:\> $env:userprofile C:\Users\username 例如,我有一台XP机器可以按照我的意愿工作: PS H:\> $profile C:\Documents and Settings\username\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 PS H:\> $env:userprofile C:\Documents and Settings\username PS H:\> $env:homedrive H: PS H:\> $env:homepath \ 这是Vista机器的相同输出,其中$ profile指向错误的位置: PS H:\> $profile H:\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 PS H:\> $env:userprofile C:\Users\username …

4
空列表时保护foreach循环
我想使用Powershell v2.0删除X天之前的所有文件: $backups = Get-ChildItem -Path $Backuppath | Where-Object {($_.lastwritetime -lt (Get-Date).addDays(-$DaysKeep)) -and (-not $_.PSIsContainer) -and ($_.Name -like "backup*")} foreach ($file in $backups) { Remove-Item $file.FullName; } 但是,当$ backups为空时,我得到: Remove-Item : Cannot bind argument to parameter 'Path' because it is null. 我试过了: 通过以下方式保护foreach if (!$backups) 使用以下方法保护删除项 if (Test-Path $file -PathType …
10 powershell 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.