有一组最近被问到的关于通过PowerShell使用Internet Explorer做一些事情的问题.所有这些都包含从PowerShell作为对象启动IE的代码$ie=new-object -comobject InternetExplorer.Application.问题是,关闭由调用组成的IE 的正确方法$ie.quit()不起作用 - 首先,如果IE碰巧有多个单独的打开选项卡,IE不会作为一个整体退出,只有对应的选项卡COM对象关闭,其次,如果它只有一个选项卡,则窗口关闭但进程仍然存在.
PS > get-process iexplore
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
352 31 7724 24968 142 0,58 3236 iexplore
228 24 22800 15384 156 0,19 3432 iexplore
Run Code Online (Sandbox Code Playgroud)
我试图研究如何关闭一个进程启动的方法New-Object -ComObject,并找到了:如何摆脱COMObject.COMObject的示例Excel.Application实际上表现如预期 - 调用quit()使窗口关闭,并且执行[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ex)if $ex是创建的COMObject会停止Excel进程.但是Internet Explorer不是这种情况.
我还发现了这个问题:如何获取正在运行的IE的现有COM对象,它提供了通过打开的窗口列表连接到IE的代码,并且工作到从其他地方启动的IE的程度,但是如果COM对象是通过PowerShell创建的,此脚本无法完全停止IE的进程,如果这样修改:
$shellapp = New-Object -ComObject "Shell.Application"
$ShellWindows = $shellapp.Windows()
for ($i = …Run Code Online (Sandbox Code Playgroud) 这个问题关系到这一个,它是从在一组点的优化路径的.这里的情况如下:对象行进包括2D点列表的指定路径.(可以使用更多的Ds,但由于每个转弯在技术上都是2D,因此求解两个维度.)在每个点上,此对象可以通过向量来改变其速度,该向量最大长度是预先确定的(分配给一个点).路径尽头的速度无关紧要.问题是,如何确定在这条路上行走的最短时间?这个任务有什么有效的算法吗?贪婪算法最终可以使对象在特殊准备数据的情况下变慢,甚至不使对象能够转向下一个指定点.后向贪婪的算法也存在同样的错误,以最大速度到达终点并不总是好的.
一个例子:点向量是:{(0,0), (0,1), (1,1), (2,2)}和最大长度向量是{2.0, 2.0, 3.0}.该点例如(0,sqrt(2))从p1 行进到p2,然后(sqrt(2),0)从p2 行进到p3,并且(s,s)无论最大速度s是从p3到p4.这可能是一个次优解决方案,比如从p1减速到p2减速0.01,允许从p2加速到p3,然后再从p3加速到p4,可能的总时间小于此一组速度.
Get-Help Get-ChildItem显示-Filter参数,显示的措辞" 以提供者的格式或语言指定过滤器 ".Powershell称之为"提供者",文件系统被声明为其中之一的语言不同.但是我没有找到关于文件系统提供程序的过滤器语法的任何语法描述.有帮助吗?
我有以下代码,仅用于测试,因为这是我想要指出的一种错误:
_shader = new Shader(new TheShader() as ByteArray);
_shader.data.width.value = [64.0];
_shader.data.height.value = [64.0];
_shaderFilter = new ShaderFilter(_shader);
_sequence = new Vector.<BitmapData>();
var smallBD:BitmapData;
var i:int;
_delta = new Point();
var megabase:BitmapData = new TheBitmap().bitmapData;
var _rect:Rectangle = new Rectangle(0, 0, 64, 64);
for (i = 0; i < 64; i++) {
smallBD = new BitmapData(64, 64, true, 0x00808080);
//_rect.x = i;
_rect.y = i;
smallBD.applyFilter(megabase, _rect, _delta, _shaderFilter);
_sequence.push(smallBD);
}
Run Code Online (Sandbox Code Playgroud)
然后我循环通过_sequence以查看更改矩形是否实际上做了什么.如果_shaderFilter实际上是着色器过滤器,它什么都不做.使用任何内置Flash过滤器进行测试都可以正常工作,但是使用ShaderFilter时,它有时就像提供的矩形明显是sourceBitmapData.rect一样,无论源位图是什么,有时它的行为就像没有传递数据一样,边界是位于奇怪的位置 - 大小为512x384的位图,传递到着色器的区域边缘显然位于(256,192)或位图的中心.到目前为止,我只能实现一个解决方法,即首先copyPixels()所需的区域,然后applyFilter()到位.有人可以证明这是一个错误而不是我做错了吗?
PS:我使用FlashDevelop,项目目标是Flash Player 10.3,我不知道FP11是否修复了这个问题.
shutdown当我偶然发现时,我在PowerShell 2.0中的命令后尝试了一些随机参数shutdown -y.它似乎只是注销用户.
如果使用任何其他随机字母(这不是有效参数),则不会发生任何事情.例如:shutdown -b
我的问题是:shutdown -y做些什么特别的事吗?
我找不到任何关于此的文档.
我想改变当前交互式 Powershell 会话中接受的数据和错误的文化。我知道这个问题powershell:改变当前会话的文化和这个问题改变SuperUser 上的当前文化。主要问题是它不适用于 Powershell 3.0 和 4.0。
PS C:\users\me\Documents> [system.threading.thread]::currentthread.currentculture
LCID Name DisplayName
---- ---- -----------
1049 ru-RU ??????? (??????)
PS C:\users\me\Documents> [system.threading.thread]::currentthread.currentculture=[system.globalization.cultureinfo]"en-US"
PS C:\users\me\Documents> [system.threading.thread]::currentthread.currentculture
LCID Name DisplayName
---- ---- -----------
1049 ru-RU ??????? (??????)
Run Code Online (Sandbox Code Playgroud)
UI 文化也不接受新设置。Set-Culture无论我是否使用管理员访问权限,总的来说都不起作用 - 无论如何,它不应受此影响,因为效果仅适用于单个进程。在Using-Culture从MSDN博客Powershell的,适于通过SO社会的作品,但只是部分,例如,以“RU-RU”当前文化我能够从“15年6月19日下午2时26分02秒”获得合适的日期字符串,它通过 位于“en-US”区域性中Using-Culture "en-US" {get-date -date "6/19/15 2:26:02 PM"},但不可能收到另一种语言的错误:sayUsing-Culture "en-US" {$null.test='1'}导致俄语区域设置错误,就好像区域性没有改变一样。
此行为已在我安装了 Powershell 4.0 的本地 Win7 Professional 工作站和安装了 Powershell 3.0 的 Windows Server 2012 上进行了测试,这是解析错误本地化日期字符串所必需的。后者具有“en-US”的 UI 文化和系统区域设置“ru-RU”。 …
您创建了一个脚本,它工作了一段时间,然后突然开始崩溃,并显示“您无法在空值表达式上调用方法”或“在此对象上找不到属性‘属性名称’。验证该属性存在并且可以设置。”。这是什么意思?
我在的一行中有一个数组$a=@(1,2,3,4,56)。当我这样做时Write-Debug $a,出现“数组不是字符串”行中的异常。如果可以,$a | out-string | write-debug我将在列中获取值列表。我可以编写一个可以在一行中写一个数组的函数(或一个没有换行符的字符串),但是我想知道我是否正在发明Powershell中存在的自行车,所以我可以使用现有的解决方案。
是否有内置函数或不太花哨的单行格式来显示类似于以下格式的数组(1,2,3,4,56)?