Articles of PowerShell

PowerShell脚本运行后Diskpart中断驱动器号

我构build了一个使用Diskpart挂载(附加)VHD的脚本,清除了一些系统文件,然后卸载(分离)它。 它使用一个foreach循环,并假设使用相同的驱动器号来清理多个VHD。 但是,在第一个VHD失败之后。 我还注意到,当我尝试手动附加一个带有diskpart的VHD时,diskpart成功,磁盘pipe理器显示正确的驱动器盘符,但在同一个PoSH实例中,我无法连接(设置位置)该驱动器。 如果我在第一次打开PoSH的时候做了一个手动的磁盘分区,那么在这个实例中,我可以附加和分离所有我想要的,并且每次都得到驱动器盘符,但是当我运行脚本的时候,使用。 有什么我需要做的重置脚本中的diskpart? 这是我正在使用的脚本的一个片段。 $test="" $Test2="" $MsgBoxObj = New-Object -ComObject wscript.shell $all = @() $obj = New-Object System.Collections.ArrayList $hash = @{} function Mount-VHD { [CmdletBinding()] param ( [Parameter(Position=0,Mandatory=$true,ValueFromPipeline=$false)] [string]$Path, [Parameter(Position=1,Mandatory=$false,ValueFromPipeline=$false)] [string]$DL, [string]$DiskpartScript = "$env:SystemDrive\DiskpartScript.txt", [switch]$Rescan ) begin { function InvokeDiskpart { Diskpart.exe /s $DiskpartScript } ## Validate Operating System Version ## if […]

如何获得SamAccountName或UPN的邮箱文件夹权限?

我需要收集和存储Exchange系统每个邮箱中每个文件夹的文件夹权限。 我已经意识到Cmdlet的Get-MailboxFolderPermission但它有一个严重的问题。 由Get-MailboxFolderPermission返回的对象是(User,AccessRights,FolderName)的元组。 但是,“用户”标识不是一个对象,它只是表示用户的DisplayName的简单string。 (编辑:这是不正确的。查看答案的细节。)。 但是, 显示名称在Exchange部署中不一定是唯一的。 在我们的森林中,有十几个邮箱具有相同的显示名称。 因此,来自Get-MailboxFolderPermission的结果不明确,并且不能唯一标识单个用户或邮箱。 如何以明确的方式获取邮箱文件夹的权限? 我希望稍后可以使用Add-MailboxFolderPermission重新分配它们,理想的情况是使用UPN。

WinRM的聆听者并不全是耳朵

这是当我尝试连接到我的远程机器上的Powershell时发生的情况: PS C:\Users\Jonathan> Test-WSMan -ComputerName 54.228.XX.XX Test-WSMan : The WinRM client cannot complete the operation within the time specified. Check if the machine name is val id and is reachable over the network and firewall exception for Windows Remote Management service is enabled. At line:1 char:11 + Test-WSMan <<<< -ComputerName 54.228.XX.XX + CategoryInfo : InvalidOperation: […]

使用PowerShell修改IIS web.config

我正在尝试使用PowerShell修改web.config。 到目前为止,我可以使用以下方法replace连接string: Set-WebConfigurationProperty -pspath "IIS:\Sites\$Name\WS" -filter "connectionStrings/add[@name='Product.Core.WebServices.Properties.Settings.DirectoryConnectionString']" -name "connectionString" -value "Server=SERVERNAME\INSTANCE1;Database=ProductDirectory.$Name;Trusted_Connection=True;" 这工作正常。 现在,我想改变web.config的applicationSettings部分。 该部分看起来像: <applicationSettings> <Product.Core.WebServices.Properties.Settings> <setting name="LogLevel" serializeAs="String"> <value>Info</value> </setting> <setting name="LogDirectory" serializeAs="String"> <value>D:\temp</value> </setting> <setting name="LogSpecialTroubleshoot" serializeAs="String"> <value>False</value> </setting> <setting name="LogSqlQueries" serializeAs="String"> <value>False</value> </setting> <setting name="LogPerformance" serializeAs="String"> <value>False</value> </setting> <setting name="LogXmlInput" serializeAs="String"> <value>False</value> </setting> <setting name="LogXmlInputSeperate" serializeAs="String"> <value>False</value> </setting> <setting name="EnableCatchAllLogging" serializeAs="String"> <value>True</value> […]

Powershell DISM New-Windows Image:使用CompressionType会给出错误

PS C:\ProgramData\Microsoft\Windows\Hyper-V\BigHomie> New-WindowsImage -CapturePath K: -ImagePath C:\VHDImports\Win764.wim -name "BigHomies Personal Image" -Verify -CompressionType "Max" 抛出以下错误: New-WindowsImage : The given key was not present in the dictionary. At line:1 char:1 + New-WindowsImage -CapturePath K: -ImagePath C:\VHDImports\Win764.wim -name " … + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [New-WindowsImage], KeyNotFoundException + FullyQualifiedErrorId : System.Collections.Generic.KeyNotFoundException,Microsoft.Dism.Commands.NewWindowsImageC ommand 我会说运行这个命令w / out […]

在Windows 2012 R2服务器核心上使用DFSR模块

我有一个标准的Windows 2012 R2服务器核心框设置。 我有与DFSR一起安装的文件服务器angular色。 我想使用像Get-DfsrState和其他Get-Dfsr* Get-DfsrState工具来检查我的系统的健康状况。 这个工具出现在我用完整的GUI设置的系统之一上。 但是我不清楚我需要安装它。 对可用Windowsfunction的快速search显示,在完整的GUI系统(即RSAT-DFS-Mgmt-Con )上存在的核心服务器上没有安装一个与DFS相关的function。 我是否认为这个模块是作为这个function的一部分? 不幸的是,当我尝试从远程系统使用服务器pipe理器添加此function时,Windows告诉我它将安装完整的GUI? > Get-WindowsFeature | ? {$_.Name -like '*dfs*'} Display Name Name Install State ———— —- ————- [X] DFS Namespaces FS-DFS-Namespace Installed [X] DFS Replication FS-DFS-Replication Installed [ ] DFS Management Tools RSAT-DFS-Mgmt-Con Removed 我错过了什么吗? 我真的必须有一个完整的GUI来使用这个命令吗? 我想我运行在一个完整的桌面系统上,并使用-ComputerName选项,但我希望设置nagios来监视与NRPE各种系统的输出。

使用包含程序path的PowerShell导出防火墙规则

我正在寻找一种方法来使用PowerShell导出现有的Windows防火墙规则,其中包括被引用程序的path(对于那些引用程序path而不是端口范围的规则)。 Get-NetFirewallRule包含大量的信息,但似乎缺less程序。 最好以人类可读的格式,我也可以自动化。 作为PowerShell对象的输出将是最好的,但表格的东西将是足够好的。 我试过了: Get-NetFirewallRule,pipe道到Get-Member,pipe道到格式列表* 用Get-NetFirewallRule并用高深度的Export-CliXml序列化它 – 程序path不在XML文件中。 简短(简短!)在netsh周围戳 我可以手动从WF.msc进行导出以获得制表符分隔的列表,但是我希望能够自动化的东西。 我确实发现了这一点 ,但它不是人类可读的,看起来像一个全/无导入导出,不是我可以用来提取新规则 这是在pipe理数十个用于在软件公司持续集成的构build虚拟机的情况下,但也可以应用于我们其他工作站的系统pipe理。 到目前为止,我还没有find一个解决scheme,让我在一个系统(特定的规则)上制定规则,并创build一个PowerShell脚本(或GPO或其他),将相同的规则添加到其他机器。 我所缺less的是程序path。 一旦我有了,我可以轻松处理规则创build方面。

Powershell无法从Active Directory中检索pwdLastSet

有人可能会发现Powershell命令尝试从Active Directory中为某些用户提取pwdLastSet的错误吗? 对于一些帐户它的作品: PS C:\> get-aduser -filter "name -like 'Admin*'" -Properties pwdLastSet | Select -first 1 name,pwdLastSet | format-list name : Administrator pwdLastSet : 131254235816382539 对于一些它不: PS C:\> get-aduser -filter "name -like 'G*Ol*'" -Properties pwdLastSet | Select -first 1 name,pwdLastSet | format-list name : Grzegorz Olędzki pwdLastSet : 需要注意的是,从GUI中检索时,该属性似乎被设置: 这个问题始终影响到多个帐户,所以我怀疑有些事我根本不明白。

寻找一个脚本来恢复SQL服务器备份

我正在寻找一个脚本来恢复SQL Server 2005备份。 理想情况下,脚本将具有以下function 处理networking位置上的备份文件 处理源和目标服务器的不同文件结构(“使用MOVE”?) 用PowerShell编写 有什么build议么?

以pipe理员身份运行脚本,无需以pipe理员身份login

我的一个老伴侣常常说:“任何问题都是愚蠢的,愚蠢的是不要问” 我很新的Windows系统pipe理员(只有3/4个月),最近我开始在PowerShell 2.0的工作。 我正在pipe理一组Windows服务,其中一个将尝试执行“启动服务”命令作为PowerShell脚本的一部分。 此Windows服务作为pipe理员组的一部分在域帐户“ATG \ Boot”下运行。 但是,由于这个原因,启动服务/停止服务总是失败: 停止服务:由于以下错误,无法停止服务“SQL Server Reporting Services(MSSQLSERVER)(ReportServer)”:无法在计算机上打开ReportServer服务。 在行:1个字符:13 +停止服务<<<< 报告 + CategoryInfo:CloseError:(System.ServiceProcess.ServiceController:ServiceController)[停止服务], ServiceCommandException + FullyQualifiedErrorId:CouldNotStopService,Microsoft.PowerShell.Commands.StopServiceCommand 这个错误被重现,当我从shell执行脚本,但正常运行时,我以“以pipe理员身份运行”选项运行脚本。 我想同情该用户是本地pipe理员组的一部分。 有任何想法吗?