Articles of PowerShell

用set-acl添加的用户权限不会被inheritance到文件和子文件夹

我写了两个PowerShell脚本。 一个询问用户的文件夹名称。 它将创build一个具有该名称的文件夹,赋予用户完全控制权,赋予pipe理员组完全控制权并剥夺inheritance权,仅留下用户和pipe理员。 第二个脚本要求input用户名,并在新文件夹中为该用户提供修改权限。 它的工作原理除了一件事情:当我在新创build的文件夹中创build文件或文件夹时,它不会inheritance这些权限。 我看着安全标签,点击进阶和编辑(在帐户上),发现2件事情不是我想要的: “应用于”设置是“仅此文件夹”。 当我手动将其设置为“此文件夹,子文件夹和文件”它按预期工作 使用第二个脚本创build的用户具有上述function,并且不会勾选“删除子文件夹和文件”权限框。 添加帐户围绕以下几行进行: $Acl = Get-Acl $Folderpath $Ar = New-Object system.Security.AccessControl.FileSystemAccessRule($user_account,"FullControl","Allow") $Acl.Setaccessrule($Ar) Set-Acl $Folderpath $Acl $Folderpath是一个指向文件夹的variables集。 $user_account是之前包含useraccount名称的variables集。 我的问题: 有没有办法将这些帐户正确添加到文件夹权限(权限将被inheritance,用户具有删除权限)或在脚本中后来纠正它?

备份组策略对象及其OU链接

我意识到可以通过多种方式备份GPO – 通过Powershell,通过组策略pipe理等等,但是在Windows中,不仅可以备份GPO本身,还可以备份与各自OU的链接? 这些工具是可以实现的,还是需要像系统状态备份那样的工作? 干杯!

如何监视Windows进程的工作集大于4GB?

显然,.NET框架有一个错误,可以防止2GB以上的工作设置值被精确地确定。 在2到4GB之间,可以应用一些异或计算来获得值,但是没有办法获得大于4GB的工作集值(使用.Net或WMI) 当工作集大于4GB时,可以使用哪种方法(最好是使用PowerShell脚本)获得对进程工作集的精确度量? (一些边的细节可以在这个StackOverflow问题中find)

授予AD安全组Exchange完全访问权限

我的公司正在运行Exchange 2007.不时,我们需要打开用户的邮箱来完成各种任务。 到现在为止,我们一直在logging他们和直接使用Outlook。 我想为所有邮箱提供完全访问权限给活动目录中的“IT”安全组,这样我们可以简单地在我们的帐户下在Outlook中打开他们的文件夹/邮箱。 我理解从PowerShell中执行此操作的语法,但Exchange无法find“IT”组名称。 Add-MailboxPermission -Identity 'IT' -User '*' -AccessRights 'FullAccess' 该命令在Identity参数上停顿。 当指定另一个交换用户时,它工作正常,但不适用于AD组。 我可以通过GUI添加权限,但一次只能添加一个帐户。 我已经试过了我能想到的所有configuration,包括'DOMAIN \ IT''CN = IT等等',但没有骰子。 任何帮助? 谢谢!

权限问题? 腻子+ Plink + Pageant + Powershell +预定任务

背景 我有以下组件: 一个Windows Server 2008 R2框 pipe理员帐户(我的) 作为框的pipe理员的域上的服务帐户 安装Putty(包括命令行的plink和作为ssh公钥生成的Pageant) 用于在SSH会话期间使用的命令的文本文件 一个运行plink的powershell脚本,它使用Start-Process来调用plink命令行,告诉它使用PuTTY连接的Ageant和命令的commands.txt。 作为我的用户帐户运行的计划任务 目标 最后,让计划任务作为服务帐户运行,该服务帐户调用powershell作为服务帐户,运行该进程并执行ssh命令。 问题 当我从PowerShell命令提示符运行这个脚本作为我的用户帐户,它运行。 当我从计划任务运行此脚本作为我的用户帐户,具有最高的权限,并告诉它保存我的凭据,它“不运行”。 通过“不运行”,这意味着它似乎产生了一个plink.exe的实例,这是我认为这个问题正在发生(我挂在控制台上看不到的东西)。 问题 任何人都有一个整体的解决scheme,有点更优雅,但使用相同或类似的工具? 我的powershell脚本是否应该调用cmd.exe,以便至less可以将stdout捕获到我的日志文件中? 剧本 如果有帮助: #Starts the vcenter2 server. #if the server is already started, it will tell you so. #Stop an error from occurring when a transcript is already stopped $ErrorActionPreference="SilentlyContinue" Stop-Transcript | out-null #Reset the […]

使用Powershell,比较两个事件的TimeCreated值,如果一个比另一个更老,则采取行动

我创build了一个名为ScriptEvents的事件日志,我使用几个脚本来写入。 我想要做的是运行这些命令(或相当于): Get-WinEvent -FilterHashtable @{logname='ScriptEvents'; id=1} -MaxEvents 1 Get-WinEvent -FilterHashtable @{logname='ScriptEvents'; id=0} -MaxEvents 1 然后比较它们的TimeCreated值并在第一个事件比第二个事件老时执行操作。 这是这些命令的输出: ProviderName: PauseSnapshots TimeCreated Id LevelDisplayName Message ———– — —————- ——- 9/26/2013 11:58:07 AM 1 Information Replication has been paused…. ProviderName: ResumeSnapshots TimeCreated Id LevelDisplayName Message ———– — —————- ——- 9/26/2013 1:30:42 PM 0 Information Replication has been resumed…. 任何帮助,将不胜感激。

转换Get-ADPrincipalGroupMembership,以便我可以将它写入注释字段

我正在编写一个PowerShell脚本来自动放置用户请假。 作为这个过程的一部分,如果要阻止他们回到数以千计的电子邮件,那么我们会将他们从DL中删除。 我打算将成员名单保存在电话标签下的注释字段中,以便我们可以在返回时手动轻松地进行恢复(一次一个自动化步骤) 我没有问题拉动通讯组列表: Get-ADPrincipalGroupMembership $user | Where-Object GroupCategory -eq Distribution | select name 遇到麻烦的部分是当我尝试将它保存到注释字段中时: Set-ADUser $user -replace @{info=(Get-ADPrincipalGroupMembership $user | Where-Object GroupCategory -eq Distribution |select name)} 我得到的错误: Set-ADUser : Invalid type 'System.Management.Automation.PSObject'. 我已经尝试用-split和-join将数据按摩成形,但要么我没有正确地做,要么这些不是正确的命令。 ConvertTo-CSV“作品”,但增加了很多额外的东西。 如何转换这些数据,以便电话标签可以接受? 我的首选格式是我可以用来复制/粘贴组后面的后缀,即。 group1; group2; group3等(我也会采取评论,我接近这一切都是错误的,方法xyz好多了。)

通过脚本更改快捷方式参数

我们在这里有一个程序,要求每个用户在他们的桌面上有一个指向一个ini文件的快捷方式。 每个文件对用户来说都是唯一的。 最近,我们已经在单独的服务器上安装了新的应用程序。 我希望能够在客户端计算机上运行脚本来查看当前的快捷方式,更改服务器名称,然后将其保存到相同的位置。 我认为,PowerShell将是必要的。 一些事情的影响: $oldargs = # Pull out the args from the current shortcut using voodoo magic $args = $oldargs -replace "server1", "server2" $WshShell = New-Object -comObject WScript.Shell $Shortcut = $WshShell.CreateShortcut("$env:PUBLIC\Desktop\app.lnk") $Shortcut.TargetPath = "%ProgramFiles%\appdir\app.exe" $Shortcut.Arguments = "$args" $Shortcut.WorkingDirectory = "%ProgramFiles%\appdir" $Shortcut.IconLocation = "%ProgramFiles%\appdir\pic.ico" $Shortcut.Save() 真的,我只是失去了如何从当前的快捷方式参数中提取参数。

在Windows 7上使用Powershell创buildnetworking共享文件夹

我需要使用PowerShell在Windows 7上创build一个共享networking文件夹 – 我无法访问New-SmbShare,因为这是Windows 8和Windows 2012 Server – 任何示例都会很棒。 我仅限于WMI电话吗?

您可以使用WMI来确定连接是否从DHCP获取其DNS服务器?

networking接口的DNS服务器search顺序可以像这样在Powershell中从Win32_NetworkAdapterConfiguration中读取,或者使用.Net ManagementObjects以编程方式读取: > $NICs = Get-WMIObject Win32_NetworkAdapterConfiguration | where{$_.IPEnabled -eq “TRUE”} > $NICs[0]["DnsServerSearchOrder"] 192.168.1.1 192.168.1.2 无论是将接口configuration为从DHCP获取还是手动设置,都将WMI属性设置为活动的DNS服务器。 您可以将它们设置为像这样的固定服务器: > $DNSServers = “198.102.234.125″,”198.102.234.126″ > $NIC.SetDNSServerSearchOrder($DNSServers) 要将适配器设置为使用来自DHCP服务器的DNS,可以使用null调用set函数,如下所示: > $NIC.SetDNSServerSearchOrder() 我无法在registry中find此设置的任何独特痕迹。 有什么办法可以告诉一个接口当前设置为使用DHCP来获取其DNS服务器?