星期四, 九月 27, 2007

如何在Powershell中解析HTMLDocument

HTML document是相对XML Document而言,非格式良好的XMLnon-well formatted.
使用标准的XMLDocument会出现语法检查错误。
必须使用mshtml.dll包含的标准HTMLDocumentClass.
标准的vbscript:代码
set htmlDoc= createobject("HTMLFILE")
page = "<html><body>this is a test</body></html>"
htmlDoc.write(page)
htmlDoc.close


对应的POWSERShell代码为:
$htmlDoc= New-Object -com "HTMLFILE"
$page = "<html><body>this is a test</body></html>"
$htmlDoc.write($page) #出错代码,出现type mismatch错误.
$htmlDoc.close

具体的原因看网络上的解释,似乎是DOM包装的时候,有些接口没有实现造成的问题。
所以目前找到的方法是使用IE控件,代码如下:
$IE= New-Object -com "InternetExplorer.Application"
$IE.navigate('about:blank')##必须的代码行
$IE.Resizable=$True
$IE.StatusBar=$True
$IE.AddressBar=$False
$IE.MenuBar=$False
$IE.Toolbar=$False
while ($IE.busy)
{
sleep -milliseconds 50
}
$page = "<html><body>this is a test</body></html>"
$IE.documetn.body.innerHTML=$page#该代码在IE7以下的IE中不能工作必须换成下面的代码
$IE.document.write( $page) #或者替换为 $oIE.document.IHTMLDocument2_write($html)

出现的错误为:
Property 'innerHTML:' cannot be found on this object; make sure it exists
and is settable.

如何得到Windows所有安装的COM控件?

在PowerShell下,用一下命令都可以做到
1.gci HKLM:\Software\Classes -ea 0| ? {$_.PSChildName -match '^\w+\.\w+$' -and (gp "$($_.PSPath)\CLSID" -ea 0)} | ft PSChildName
2.get-wmiobject Win32_COMClass

星期三, 九月 26, 2007

PowerShell 特殊语法符号。@

@()

空数组

$hash = @{ }

创建空哈希表

@(Get-Alias;Get-Process)

执行其中的两条命令,然后在数组中返回结果


字符串常量:

@”

这是here string”,其中可包含任意字符包括回车和引号。将计算表达式 $(2+2)

”@

@’

带单引号的here string不计算表达式。 ‘@

星期五, 九月 21, 2007

PowerShell 错误处理及查看DLL方法

可以在任何function或代码文件中申明如下语句:
trap [Exception]
{
write-host ("trapped " + $_.Exception.GetType().Name); continue;
}


星期四, 九月 20, 2007

Regular Express 表达删除一个空行(blank line)

程序开发中一个常见的问题是如何删除一大段文本中的空行。
所谓的空行就是一行只包含一些空格,制表符或其他不可见的符号的文本行。
在Vbscript的RegExp 对象,支持RegExpOption.Multiline的属性,可以轻易删除。
但其他各种语言,perl,vbscript等等,没有简单的方法。
regularE="^$"可以匹配一个只包含回车换行的空行
但通过十六进制来看很多文本往往发现很多包含000D 00 0D 00 0A之类的空行。
非常难以处理。

标准的删除一个包含很多回车换行的文本的规则表达为
regularE="[\r\n]+\s*[\r\n]+"
这里是一个详细的解释:

http://www.ultraedit.com/index.php?name=Forums&file=viewtopic&t=2777

但这种方法会删除一个所有的回车换行。
所以必须单独编写方法来出来。

星期三, 九月 19, 2007

Microsoft PowerShell 1,0 定制提示符号的简单技巧





















set-item -path function:prompt -value {' PS '+ $(Get-Date -format t) + " " + $(write-host -f red $(Get-Location) -nonewline) + '> '}

得到如下效果:

星期一, 九月 17, 2007

如何通过VBA来让Excel显示HTML代码?

目前发现的方法只是让 EXCEL通过web query是直接支持的。
如果需要更加灵活的方式,目前只能通过把 HTML代码复制到系统粘贴板,然后再让EXCEL
粘帖来实现。

首先在Excel里 ,按下Alt+F11打开宏编写。
然后在菜单工具-->引用。。里找到 Microsoft Forms 2.0 object library ,启用之,
然后书写一下代码,则可以实现了Excel的HTML渲染。

Dim MyDataObj As New DataObject

MyDataObj.SetText "

OneTwo
"

MyDataObj.PutInClipboard '复制到clipboard

然后再调用

ActiveSheet.Paste

则可以显示HTML效果了。

另外一种通过 HTMLProject 来完成,把HTML页面直接传送过去

ActiveWorkbook.HTMLProject.HTMLProjectItems(stockCode).Text = resl
ActiveWorkbook.HTMLProject.RefreshProject


星期五, 九月 14, 2007

几种语言如何设置跳过盗链的检查

一般Java 访问网站。
URL url=new URL("url地址");
然后
Connection conn = url.OpenConnection();
加入下面这行:
conn.addRequestProperty("REFERER", "http://www.mydomain.com");
然后后面再用conn.readLine等就可以避免盗链检查了。

命令行curl访问一个网站避免盗链检查的方式:

curl -x 191.168.1.1:1688 -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -D cookie0001.txt --proxytunnel -o test.html -e "http://quote.地址" %1

Vbscript设置跳过盗链检查。
一个注意事项:在HTML中,设置不起作用,这可能是防止钓鱼网站的原因。
代码如下:
Set httpObj = CreateObject("Microsoft.XmlHttp")
httpObj.open "GET", url, FALSE
'跳过盗链检查
httpObj.setRequestHeader "REFERER", "http://quote.eastmoney.com"
httpObj.send ""