Articles of PowerShell

我如何在远程Powershell会话中使用共享函数?

我有一些PowerShell脚本用于设置IIS Web应用程序,消息队列等 他们使用我们创build的一组共享函数库 – 因此每个脚本都以行开始 . .\common.ps1 引用共享库。 共享库包含一组函数,如Create-IisApplicationPool , Create-MessageQueue等,然后从实际的脚本中调用它们。 这些脚本的问题是,您需要通过远程桌面login并在本地运行它们,因此我正在编写一些新的脚本,用于将代码部署到Amazon EC2实例,并使用Powershell远程处理在本地调用它们。 我无法解决的是如何使这个共享库在远程Powershell会话中可用。 这是一个简单的例子: functions.ps1 function Add-Title([string] $name) { "Mr. $name" } function Say-HelloWorld([string] $name = "World") { $computerName = $env:COMPUTERNAME $greeting = Add-Title($name) Write-Host "Hello, $greeting ($computerName)" } example.ps1 . ./functions.ps1 $remoteUsername = "username" $remotePassword = "password" $remoteHostname = "172.16.0.100" $securePassword = ConvertTo-SecureString […]

当数据库与Web服务器分离时,可以使用powershell脚本来安装db / website吗?

我的老板正在休假,我应该在他回来的​​时候完成这个安装脚本。 不幸的是,我已经意识到,我开发的脚本不能在目标服务器设置上工作,我不知道如何解决这个问题。 服务器正在运行SQL Server 2008 R2标准SP1,我的安装脚本是PowerShell v1,需要访问数据库服务器上的两个pipe理单元以及Web服务器上的一个pipe理单元。 他的networking服务器与数据服务器分开,只能通过networking服务器桌面上的RDP访问数据服务器。 我在我的设置上开发的脚本工作正常,但这是因为我的networking服务器和dataserver不分开。 在他的设置中,我可以成功地在dataserver上运行安装的数据库部分,并成功地在networking服务器上运行网站部分,但是他期望我将有一个用于安装的脚本。 我无法弄清楚如何让这两个实例互相交stream来实现这一点。 是否有可能使这个工作作为一个单一的脚本? 我甚至不知道如何开始。

如何将Exchange安全组的所有权视为Exchangepipe理员?

我们使用Exchange 2010作为Office 365订阅的一部分。 我们只有爱丽丝拥有一个安全组。 如果不使用Alice的帐户,pipe理员如何获得该安全组的所有权? PS C:\> Get-DistributionGroup "SecurityGroupX" | Select ManagedBy -ExpandProperty "ManagedBy" namprd00.prod.outlook.com/Microsoft Exchange Hosted Organizations /example.onmicrosoft.com/alice 我是组织pipe理angular色的成员,所以我希望能够覆盖此权限。 我尝试使用Exchangepipe理门户,我也尝试使用PowerShell: PS C:\> Set-DistributionGroup "SecurityGroupX" -ManagedBy "[email protected]" You don't have sufficient permissions. This operation can only be performed by a manager of the group. + CategoryInfo : NotSpecified: (:) [Set-DistributionGroup], OperationRequiresGroupManagerException + FullyQualifiedErrorId : 99CEE042,Microsoft.Exchange.Management.RecipientTasks.SetDistributionGroup […]

Powershell显示两次组成员的用户 – 曾经间接直接一次

我已经开始设置组: 部门工作人员 部,监事 部门主任 部门主pipe是部门工作人员的成员,部门主任是部门主pipe的成员。 我知道如何使用powershell列出一个人是哪个组的成员,可以直接分配,也可以通过嵌套组inheritance。 但是我想要弄清楚的是一个脚本,它将直接或间接地向我展示所有属于这些组的成员的用户,例如。 用户A是部门工作人员和部门主任的直接成员。 我的searchfunction使我无法find或编写一个可以做到这一点的脚本。 编辑: 实际上,嵌套层次多,分支多,部门多,容易混淆。 我想直接得到任何一个小组的成员名单,也可以间接获得同一小组的成员名单,这样我就可以删除多余的小组直接成员资格。

PowerShell:允许用户立即更改密码

我们有一个VPN,不允许用户连接,如果他们的密码更改挂起。 有时这些用户忘记密码,或者需要重置密码。 在这种情况下,使用“用户必须在下次login时更改密码”设置临时密码不起作用,因为VPN阻止他们login。 一个解决scheme是取消选中这个字段,并告诉用户手动更改密码,但这与我们的密码策略相违背,这要求用户在密码更改之间等待一天。 这是不安全的(而且看起来不太好)。 有没有办法暂时绕过一个用户的最低密码年龄要求? 奖金点,如果它是一个PowerShell命令,但我会接受任何方法。

如何使用get-adgroupmember从活动目录中提取非默认属性

当我运行: get-adgroup -filter {displayname -eq'groupname'} | get-adgroupmember | 格式表名,姓,名,办公电话 唯一返回的字段是默认属性“name”。 剩下的显示空白。

网站的双子网(AD)

我正在尝试在从.txt文件加载的现有站点中创build子网。 我的代码如下所示: <#Add subnets to matching sites#> $i=0 foreach($_ in $subnetList){ $currentSites = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().Sites if($currentSites.Subnets -match $_){ continue }else{ New-ADReplicationSubnet -Name $_ -Site $siteList[$i] $i++ } } $subnetList和$siteList有以下内容: $subnetList = 10.0.0.0/21 10.0.5.0/21 10.0.9.0/24 10.0.11.0/24 10.0.14.0/24 10.0.19.0/24 <#SITENAME1 has 2 occurences.#> $siteList = SITENAME1 SITENAME1 SITENAME2 SITENAME3 SITENAME4 SITENAME5 我遇到的问题是,当SITENAME1添加第一个子网时,它会在第二次尝试时返回一个错误: New-ADReplicationSubnet : An attempt was made […]

Powershell:get-qadcomputer命令

Get-QADComputer -NotLoggedOnFor 90 -SearchRoot 'doman.name/OU1/OU2' 我想为最后一个OU使用一个variablesex: Get-QADComputer -NotLoggedOnFor 90 -SearchRoot 'doman.name/OU1/$OU2' 直接在上面的代码中出现错误“无法parsing目录对象”。 有没有办法以这种方式使用variables,或者更好的方法来做到这一点?

如何使用Powershell对TrustedInstaller拥有的文件设置审核控制?

我正在尝试使用以下Powershell脚本在位于\%Windows%\System32 (例如, aaclient.dll )中的许多文件(列在ACLsWin.txt )上设置审核控制: $FileList = Get-Content ".\ACLsWin.txt" $ACL = New-Object System.Security.AccessControl.FileSecurity $AccessRule = New-Object System.Security.AccessControl.FileSystemAuditRule("Everyone", "Delete", "Failure") $ACL.AddAuditRule($AccessRule) foreach($File in $FileList) { Write-Host "Changing audit on $File" $ACL | Set-Acl $File } 每当我运行脚本,我得到错误PermissionDenied [Set-Acl] UnauthorizedAccessException 。 这似乎来自于这些文件的所有者是TrustedInstaller 。 我以pipe理员身份运行这些脚本(即使我在内置的pipe理员帐户中),但仍然失败。 我可以使用“安全”选项卡手动设置这些审计控制,但至less有200个手动执行的文件可能会导致人为错误。 如何绕过TrustedInstaller并使用Powershell设置这些审核控件?

如何强制powershell刷新caching的数据? PSDrive的Get-ChildItem结果不是最新的

Import-Module WebAdministration $pool = "ChannelServices" $wp = Get-ChildItem "IIS:\AppPools\$pool\WorkerProcesses" Get-Process -Id $wp.processId Restart-WebAppPool $pool sleep 5 Get-ChildItem "IIS:\AppPools\$pool\WorkerProcesses" Get-Process -Id $wp.processId 所以,当我为一个特定的AppPool的WorkerProcesses做一个Get-ChildItem,然后重新启动这个AppPool,我应该得到一个新的PID,这是我做的。 但是,重新运行Get-ChildItem仍然显示旧的PID。 如果closuresPowershell并重新打开,它将不会显示正确的新PID。 我怎样才能强制Powershell清除它的caching,或者是否存在那些不正确的信息… 更新只是要清楚,我的问题是如何使用IIS PSDrive清除本地caching。 我注意到TypeName:Microsoft.IIs.PowerShell.Framework.ConfigurationElement#workerProcesses#workerProcess 有一个方法:名称MemberType定义 —- ———- ———- ClearLocalData方法void ClearLocalData() 但它并没有真正为我工作…像下面的人说,这可能只是一个错误。 我看到如何使用WMI的答案,我知道。 @JasonHelmick提供了一个很好的: GWMI win32_process -filter "name='w3wp.exe'" | Select Name, ProcessId, @{n='AppPool';e={$_.GetOwner().user}} 这给了我AppPool正在运行的用户名。 我修改了一下,从CommandLine中取出实际的应用程序名称: Get-WmiObject -Class win32_process -filter "name='w3wp.exe'" | Select […]