Articles of PowerShell的

如何更改环境variablespowershell并启动应用程序

在PowerShell中,我需要更改系统pathvariables: $oldPath = [System.Environment]::GetEnvironmentVariable('Path', 'Machine') [System.Environment]::SetEnvironmentVariable('Path', (Transform-It $oldPath), 'Machine') 然后启动一个程序: & $someExeName 'someargument' 我得到的问题是可执行文件正在使用旧的环境。 它不承认新的道路。 如果我还更改$ env.path,只更改此PowerShell会话的path,它也不会传播到新的进程。 如果我closuresPowerShell并在新窗口中启动可执行文件,那就没问题了。 推测它是从PowerShell进程inheritance(未更新)的环境 在PowerShell中更改环境variables并使其从该窗口启动的新进程识别的最佳做法是什么?

PowerShell 2.0命令行redirect

我正在寻找关于以下差异的解释: 鉴于下面的PowerShell脚本foo.ps1 : write-host "normal" write-error "error" write-host "yay" 运行它 C:\>powershell .\foo.ps1 > out.txt 2>&1 生产: normal C:\foo.ps1 : error At line:1 char:10 + .\foo.ps1 <<<< + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,foo.ps1 Write-Host : The OS handle's position is not what FileStream expected. Do not use a handle simultaneously in […]

System.Net.WebClient的powershell字符编码

我正在运行以下命令: ([xml](new-object net.webclient).DownloadString( "http://blogs.msdn.com/powershell/rss.aspx" )).rss.channel.item | format-table title,link 其中一个RSS项目的输出包含这个奇怪的文本: You Don’t Have to Be An Administrator to Run Remote PowerShell Commands 所以,问题是: 为什么混合在字符? 撇号发生了什么事? 为什么输出呈现为Don’t应该渲染为Don't ? 我将如何在PowerShell标准输出中获得正确的字符?

PowerShell Windows安装程序Com对象

我正在尝试使用Powershell修改MSI文件的内容。 为此,我创build一个WindowsInstaller.Installer的实例,然后使用$ installer.OpenDatabase和$ database.OpenView。 类似的function在VBScript中工作,我看到在线样本似乎工作。 $installer = new-object -comobject "WindowsInstaller.Installer" $database = $installer.OpenDatabase("C:\Temp\Setup.msi", 1) 对于上面的代码,我得到一个错误“方法调用失败,因为[System .__ ComObject]不包含名为”OpenDatabase“的方法。 $installer = new-object -comobject "WindowsInstaller.Installer" $database = $installer.InvokeMethod("OpenDatabase","C:\Temp\Setup.msi", 1) 如果我尝试使用$ installer.InvokeMethod我得到相同的错误“方法调用失败,因为[System .__ ComObject]不包含名为”InvokeMethod“的方法。 任何帮助将非常感激。 谢谢。

使用Powershell使用查找文件recursion地重命名目录

我需要重命名很多目录和他们的子目录。 我有一个csv文件,其中包含旧的目录名称和所需的新名称。 1,blah,old_name1,new_name2,wibble 2,foo,old_name2,new_name2,bar 3,john,old_name3,new_name3,paul 4,george,old_name4,new_name4,ringo 请注意,一些目录名称是 old_name1-morestuffhere 需要重新命名 new_name1-morestuffhere 我广泛地知道我将如何在bash中做到这一点: mv -r `cat file.csv | awk -F, '{print $3* $4*}'` ..但我必然会完全失去PowerShell。 编辑:这是我到目前为止。 这是closures吗? cat .\file.csv | foreach { $oldname = $_.split(",")[2], $newname = $_.split(",")[3], move-item $oldname*, $newname*}

powershell:改变当前会话的文化

我在Windows Vista上使用PowerShell。 如何改变当前会话的文化? 我的电脑的文化是tr-TR,所以我得到土耳其语的错误信息。 我想换成EN? 任何机会?

在Windows上locking计算机之前运行脚本

我已经写了一些PowerShell允许我利用键盘媒体键的力量来控制当前正在运行的任何音乐。 我想要做的是在计算机被locking的情况下运行脚本。 所以我可以暂停/停止音乐。 然后一旦机器解锁,恢复音乐。 酷啊? 我的第2次尝试是: 1 – WMI事件注册 这是locking事件 Register-wmievent –query "Select * from __instancecreationevent within 1 where TargetInstance isa 'Win32_NTLogEvent' And TargetInstance.EventCode = 4800" -Action {write-host "Pausing`r`n"; set-playpausetrack} 这是解锁事件 Register-wmievent –query "Select * from __instancecreationevent within 1 where TargetInstance isa 'Win32_NTLogEvent' And TargetInstance.EventCode = 4801" -Action {write-host "Resuming`r`n"; set-playpausetrack} 不幸的是,我认为locking事件太晚了,出于安全原因,操作系统会暂停后台交互。 当我解锁电脑时,它会触发locking和解锁事件。 2 – […]

当文件被添加到文件夹时,Powershell脚本运行.bat文件

我想监视Windows 7文件夹,并有一个.bat文件运行时,任何新的文件被添加到文件夹。 看来我应该能够使用PowerShell,这是安装在计算机上。 我已经阅读了一些这样的答案,但是我不能通过修改我看到的东西来获得任何工作。 细节: 要监视的文件夹: c:\aaa\bbb\monitorThis 要将.htm文件添加到受监控文件夹时运行batch file: c:\aaa\bbb\runA.bat Powershell脚本文件: c:\aaa\bbb\folderWatcher.ps1 有人可以描述一下folderWatcher.ps1的内容应该是什么样子,包括包含运行.bat文件命令的行,注册和注销事件,等等。 另外,右键单击.ps1文件并select“使用PowerShell运行”来启动监控,如果是这样,那么如何停止它? 更新: 按照要求,这是我到目前为止folderWatcher.ps1,但这只是一个开始,从我见过的想法: $folder = "c:\aaa\bbb\toConvert" $filter = "*.*" $fsw = new-object System.IO.FileSystemWatcher $folder, $filter -Property @{ IncludeSubDirectories=$false NotifyFilter = [System.IO.NotifyFilters]'FileName, LastWrite' } $onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { Start-Process cmd -ArgumentList "/c runA.bat" -WorkingDirectory "C:\aaa\bbb" } 注意:重新筛选,我不关心添加什么样的文件,因为我们只会把.htm文件放在该文件夹,所以添加到它的任何东西,我想触发.bat。 更新二 […]

驱动器盘符和冒号后没有斜杠的path – 它指向什么?

我打错了一个path,而不是c:\foo.txt写了c:foo.txt 。 我预料它要么失败,要么parsing为c:\foo.txt ,而是似乎在当前用户的home文件夹中parsing为foo.txt 。 Powershell返回: PS C:\> [System.IO.Path]::GetFullPath("c:\foo.txt") c:\foo.txt PS C:\> [System.IO.Path]::GetFullPath("c:foo.txt") C:\Users\Administrator\foo.txt PS C:\> [System.IO.Path]::GetFullPath("g:foo.txt") G:\foo.txt 从命令行运行explorer.exe并将以上任何一个结果传递给C:\ Users \ Administrator \ Documents以打开。 我还没有find任何文件,我完全困惑,请解释行为。

从Windows任务计划程序PowerShell脚本无法正常工作

概述:我有一个脚本,用于通过WMI在SCCM中查询新的应用程序请求。 当在PowerShell控制台中手动启动时(无论是否boost,无关紧要),该脚本都可以正常工作。 我需要通过任务计划程序运行脚本。 目前设置为使用pipe理员凭据运行,并选中“以最高权限运行”checkbox。 问题:无法从Windows Server 2008 R2中的任务计划程序正确运行。 没有报告错误(任务计划程序返回错误代码0),但它似乎没有继续行,读取: $GetAppRequest = Get-WmiObject -Class SMS_UserApplicationRequest -Namespace root/SMS/site_$SiteCode | Where-Object {$_.CurrentState -like "1"} | ForEach-Object { 这是完整的脚本: #Hard-coded variables $SiteCode = "MySiteCode" $ComputerName = "My-SCCM-Server" $GUIDFilePath = "C:\Scripts\SCCM\GUIDList.txt" $FilePath = "C:\Scripts\SCCM" $smtpServers = "smtp1.domainname.com","smtp2.domainname.com" $reliableSmtpServer = $null $logpath = "C:\Scripts\SCCM\RequestLog.txt" #logging functionality function log($message, $type){ $date = […]