Articles of PowerShell

在删除configuration文件之前,请查看所有服务器桌面上未解决的文件

我们有大约70台服务器正在转移到域环境中,因此我们将用户从本地帐户转换为域控帐户。 我们怎样才能确定哪些用户可能在他们的个人资料被删除之前在他们的桌面或文档文件夹上可能需要备份文件。 作为join域的一部分,用户将转换为使用域login,而不是本地login。 只有login这些机器的人才会是特定的技术人员,针对特定的目标运行客户特定的configuration。 我在想这里可能会有一些powershell,但是可能会有问题。 用户configuration文件确实在C:\ Users \\中,所以我可以列出这些目录并循环它们,但我怀疑有一个更好的“微软方法”来查找那些不是每个用户都空的文件夹,然后报告用户名和主机名以便在Excel中稍后进行整理。 理想情况下,代码将从一台机器运行,并使用一些较新的(PS3?)PowerShell远程技术或其他一些仪器从其他所有机器收集细节。 思考? 这是我第一次尝试: $Servers = @("localhost") $Cred = Get-Credential foreach ($Server in $Servers) { Invoke-Command -ComputerName $Server -Credential $Cred { $server @(GCI c:\Users\*\Desktop\. -Exclude *.lnk) } } 我是其中一个用户的个人资料将被删除,我不知道我是否有一个服务器上的文件,但我可以让IT运行PowerShell对所有的机器,如果我可以得到一个代码的概念运行。 由于意见进行编辑

Get-Process不适用于远程Windows 7客户端

我一直在试图对远程计算机运行Microsoft的GetNetworkStatistics脚本 ,以使我们能够跟踪哪些进程正在使用带宽以及其他工具。 我无法对远程Windows 7客户端运行脚本。 在远程和本地运行Windows Server 2012 R2计算机时,它工作正常。 在Windows 7计算机上本地运行时也可以正常工作。 我已经在Windows 7客户端上运行了Enable-PSRemoting,并且允许在Windows防火墙中使用Windows远程pipe理和Windows Management Instrumentation。 这是我在远程Windows 7计算机上运行时遇到的错误 WARNING: Could not run Get-Process -computername win7. Verify permissions and connectivity. Defaulting to no ShowProcessNames 'C:\netstat.txt' on win7 converted to '\\win7\C$\netstat.txt'. This path is not accessible from your system. At C:\Users\user\Desktop\Get-NetworkStatistics.ps1:200 char:25 + Throw "'$tempFile' on $computername converted to […]

PowerShell DSC文件复制 – 工作组机器

我有一台机器,我需要从networking共享(域上)复制文件,以从域外的机器进行部署。 目前我有以下代码; configurationdeployWebsite { PARAM ( [string []] $ MachineName =“localhost” ) 节点$ MachineName { 文件testing{ SourcePath =“\\ buildserver \ mywebsite” DestinationPath =“C:\ deployments” recursion= $ true Type =“目录” } } } deployWebsite -MachineName“at-test-2012” 我运行这个,我能够生成一个很好的MOF文件。 我得到的错误如下; PS C:\ dsc> Start-DscConfiguration -Path。\ deployWebsite -CimSession $ sess -Wait -Verbose -Force VERBOSE:使用以下参数执行操作'调用CimMethod',''methodName'= SendConfigurationApply,'className'= MSFT_DSCLocalConfigurationManager,'namespaceName'= root / Microsof T […]

如何使用PowerShell获取Hyper-V上的Windows 2008 R2 VM的IP地址?

我已经创build了一个自动构build脚本,用于在Hyper-V 2016上构build新的虚拟机。有时我需要一个2008 R2虚拟机,并且获取IP地址以连接到我的2012 R2 / 2016虚拟机的方式是使用以下某些PowerShell: get-vm -Name $VMName|Get-VMNetworkAdapter|Select-Object -ExpandProperty IpAddresses 适用于2012/2016年,但返回与2008 R2虚拟机的空arrays。 有关如何从PowerShell中获取Hyper-V IP地址的任何想法? 该脚本从Windows 10工作站运行。 编辑 我尝试了get-vm -name $VMName|Get-WmiObject -Class Win32_NetworkAdapterConfiguration作为一个testing,并在大量的适配器输出后得到这个: Get-WmiObject:input对象不能绑定到该命令的任何参数,因为该命令不需要stream水线input,或者input及其属性不匹配任何进行stream水线input的参数。 解 这就是我最终做的事情: $VMName = <the name of my vm> Invoke-Command -Session $VMHostSession -ScriptBlock { $Vm = Get-WmiObject -Namespace root\virtualization\v2 -Query "Select * From Msvm_ComputerSystem Where ElementName='$using:VMName'"; $vm.GetRelated("Msvm_KvpExchangeComponent").GuestIntrinsicExchangeItems | % { ` […]

Powershell:为AD DS对象设置所有者失败

我想在AD DS对象1上运行Set-ACL ,将“Domain Admins”设置为我构build的ACL对象中的所有者。 代码看起来基本上是这样的2 : Function SetDSAcl { Param ( [Microsoft.ActiveDirectory.Management.ADObject]$targetObject # target object ) $targetACL = Get-Acl "AD:\$($targetObject.DistinguishedName)" # [some voodoo to get the values for my new ACE] # Create a new AccessRule using the object constructor # $newAce = New-Object System.DirectoryServices.ActiveDirectoryAccessRule([…]) # Add the generated ACE to target's ACL $targetAcl.AddAccessRule($newAce) # […]

使用Powershell操作IIS7configuration

我试图使用Webpipe理模块在PowerShell中编写一些IIS7安装任务。 我很擅长设置简单的属性,但是在处理configuration文件中的元素集合时遇到了一些麻烦。 作为一个直接的例子,我想让应用程序池在给定的时间表上回收,而时间表是一个时间的集合。 当我通过IISpipe理控制台进行设置时,相关的configuration部分如下所示: <add name="CVSupportAppPool"> <recycling> <periodicRestart memory="1024" time="00:00:00"> <schedule> <clear /> <add value="03:31:00" /> </schedule> </periodicRestart> </recycling> </add> 在我的脚本中,我希望能够完成同样的事情,我有以下两行: #clear any pre-existing schedule Clear-WebConfiguration "/system.applicationHost/applicationPools/add[@name='$($appPool.Name)']/recycling/periodicRestart/schedule" #add the new schedule Add-WebConfiguration "/system.applicationHost/applicationPools/add[@name='$($appPool.Name)']/recycling/periodicRestart/schedule" -value (New-TimeSpan -h 3 -m 31) 这几乎是一回事,但是结果XML缺less通过GUI创build的<clear/>元素,我相信这是避免inheritance任何默认值所必需的。 这种集合(带有“添加”,“删除”和“清除”元素)似乎在configuration文件中是相当标准的,但我似乎无法find任何有关如何与它们保持一致的良好文档。

pipe道Powershell消息写入事件日志

我有一个运行自定义cmdlet的PowerShell脚本。 它由Task Scheduler运行,我想logging它做什么。 这是我目前的粗略版本: Add-PsSnapIn MyCmdlets Write-EventLog -LogName "Windows Powershell" -Source "Powershell" -Message "Starting Update-ClubNumbers" -EventId 0 Get-ClubMembers -HasTemporaryNumber -show all | Update-ClubNumbers -Verbose Write-EventLog -LogName "Windows Powershell" -Source "Powershell" -Message "Finished Update-ClubNumbers" -EventId 0 我想要做的是logging我的自定义cmdlet的输出。 理想情况下,我想创build不同types的事件日志条目,根据是警告还是详细消息。 更新:我不想loggingcommandlet的返回值。 Update-ClubMembers cmdlet不返回对象。 我想logging任何由WriteVerbose写的详细消息,我想logging由ThrowTerminatingError创build的错误。

链接Powershell命令时,如何引用第一个命令的输出

如何从输出中的第一个命令链提取一个值? 例如: Get-ActiveSyncDevice | Get-ActiveSyncDeviceStatistics | ft UserDeviceAgent, Identity -a UserDeviceAgent列在Get-ActiveSyncDevice中是可见的,但是我不能让它出现在最终的输出中

远程运行一个脚本调用“以pipe理员身份运行”

这与我的确切问题非常接近 ,但看起来他find了另一种符合需求的方式,因此被标记为“已回答”: 我有一个运行在服务器A上的Powershell脚本,我想在服务器B上启动一个不同的Powershell脚本。 服务器B上的脚本运行良好,如果我在本地运行它,但它必须启动,就像通过Run as Administrator身份Run as Administrator选项一样。 我无法find从服务器A启动服务器B上的脚本,不会给我一个权限问题的方法。 到目前为止,我已经尝试过: 使用本地pipe理员帐户使用PScreds对象调用命令 启动过程抛出一个PSSession使用-Verb runas标志修改服务器B脚本为“自我提升”,但它仍然失败从A 用Start-process创build一个batch file包装器 还有另一种方法来尝试我没有提出? 目的(以防万一有更好的方法)是从服务器A启动服务器B上的Windows更新。 我希望能够根据需求做到这一点,没有一个Scheduled Task ,我最终会忘记,并在我不想要的时候触发。

PHP Apache XAMPP在后台从CLI运行多个脚本

我怎样才能在XAMPP的命令行界面的背景下同时运行几十个PHP脚本? 有人build议一个batch file,但是当我尝试执行这个: start php 1.php start php 2.php start php 3.php 它只打开了一个命令提示符窗口; 我closures了那个窗口,然后再打开两个命令提示符窗口执行2.php和3.php。 我想在所有背景中同时运行尽可能多的脚本。 什么是最好的办法来完成这个,怎么办呢? 编辑这里是如何做到这一点: 1)从这里下载PowerShell 2(或与您的Windows版本兼容的版本): http : //support.microsoft.com/kb/968929 2)安装并重新启动计算机。 3)创build一个新的文件“example.ps1”并保存到你select的目录(例如c:\ examples \ example.ps1)。 把这个代码放在这个文件中: start-job {.\c:\xampp\php\php C:\xampp\htdocs\phpfiles\1.php} start-job {.\c:\xampp\php\php C:\xampp\htdocs\phpfiles\2.php} start-job {.\c:\xampp\php\php C:\xampp\htdocs\phpfiles\3.php} start-job {.\c:\xampp\php\php C:\xampp\htdocs\phpfiles\4.php} start-job {.\c:\xampp\php\php C:\xampp\htdocs\phpfiles\5.php} start-job {.\c:\xampp\php\php C:\xampp\htdocs\phpfiles\6.php} start-job {.\c:\xampp\php\php C:\xampp\htdocs\phpfiles\7.php} start-job {.\c:\xampp\php\php C:\xampp\htdocs\phpfiles\8.php} start-job {.\c:\xampp\php\php C:\xampp\htdocs\phpfiles\9.php} […]