« 2009年11月 | トップページ | 2010年1月 »

2009年12月29日 (火)

バッチファイルで、「管理者として実行」されているか?を判定する。

もし、Vista以降か、.NET Framework が入っていれば、

vbc IsUserAnAdmin.vb

Module Module1
Declare Function IsUserAnAdmin lib "shell32.dll" () As Integer
Public Function Main() As Integer
Return IsUserAnAdmin
End Function
End Module

IsUserAnAdmin.cmd

IsUserAnAdmin.exe
if %errorlevel%==0 echo「管理者として実行」されている
if %errorlevel%==1 echo「管理者として実行」されていない

もし、Windows7以降か、PowerShell 2.0 が入っていれば、

IsUserAnAdmin.ps1

Add-Type -Language VisualBasic @"
Public Class Shell32
Declare Function IsUserAnAdmin Lib "shell32.dll" () As Integer
End Class
"@
Exit [Shell32]::IsUserAnAdmin()

あるいは、バッチファイル内の1行で

PowerShell "Add-Type -Language VisualBasic 'Public Class Shell32:Declare Function IsUserAnAdmin Lib ""shell32.dll"""" () As Integer:End Class';Exit [Shell32]::IsUserAnAdmin();"

2009年12月27日 (日)

バッチファイルからコンソールウィンドウのサイズを変える。

もし、PowerShellが入っていれば、

PowerShell "$host.UI.RawUI.WindowSize=New-Object System.Management.Automation.Host.Size 1,1"

2009年12月22日 (火)

長いファイル名を用いた Start コマンドの使用

http://support.microsoft.com/kb/186613/ja

start "長いファイル名" [引数...]

が失敗する話は、

start "" "長いファイル名" [引数...]

が定石ですが、あまり好きになれません。

これだと、コンソールアプリの場合に、タイトルが空になります。

そこで、新案。

start \\.\"フルパス" [引数...]

※ start \\?\"フルパス" [引数...]

※ start file://"フルパス" [引数...]

\\.\はネットワークに接続してないときはよいが、していると遅いので、非推奨です。

file://でも引数が使えるんですね。推奨します。

バッチの中では、

start %~d1"%~pnx1" [引数...]

コマンドプロンプトでは、

for %1 in ("長いファイル名") do start %~d1"%~pnx1" [引数...]

※のものはその後、使えなくなりました。:-(

2009年12月21日 (月)

コマンドラインから、UACダイアログを出して「管理者として実行」する。

以下のショートカットファイルを作成します。

RunAsAdmin.lnk
リンク先 : %SystemRoot%\system32\cmd.exe /c start "コマンド プロンプト"
作業フォルダ : なし
実行時の大きさ: 最小化
詳細設定 : 管理者として実行

使用法は、

RunAsAdmin.lnk アプリ [引数...]

ショートカットファイルなどをRunAsAdmin.lnkにドロップしてもおk。

ところで、「管理者として実行」すると、作業フォルダが %SystemRoot%\system32 に勝手に変更されます。

そんなときは、

RunAsAdmin.lnk /d 作業フォルダ アプリ [引数...]

例えば、作業フォルダを引き継いでコマンドプロンプトを開くなら、

RunAsAdmin.lnk /d "%cd%" cmd

デスクトップでコマンドプロンプトを開くなら、

RunAsAdmin.lnk /d "%HOMEDRIVE%%HOMEPATH%\Desktop" cmd

あるいは、作業フォルダを指定したショートカットファイルなどをRunAsAdmin.lnkにドロップしてもおk。

作業フォルダを決め打ちにするなら、RunAsAdmin.lnkのリンク先に指定します。

%SystemRoot%\system32\cmd.exe /c start "コマンド プロンプト" /d 作業フォルダ

2009年12月20日 (日)

バッチファイルで現プロセスIDを調べる。

もし、PowerShellが入っていれば、

for /f %%i in ('powershell "foreach($p in (get-wmiobject win32_process -filter processid=$pid)){$ppid=$p.parentprocessid;}foreach($p in (get-wmiobject win32_process -filter processid=$ppid)){$p.parentprocessid;}"') do set PID=%%i
echo %PID%

コマンドプロンプトで現プロセスIDを調べるだけなら、

powershell "get-wmiobject win32_process -filter processid=$pid | foreach-object {$_.parentprocessid;}"

2009年12月19日 (土)

バッチファイルからコンソールウィンドウのタイトルを取得する。

titleコマンドでは、変更・設定はできても、取得ができません。

もし、PowerShellが入っていれば、

for /f "delims=" %%i in ('powershell "$Host.UI.RawUI.WindowTitle"') do set title=%%i
echo %title%

2009年12月17日 (木)

ココログで全記事を表示する。

ココログの仕様変更で、「カテゴリ」で全記事の表示ができなくなりました。:-(
以下のようなhtmlファイルを作れば、全記事を表示できます。
これを「完全」で保存すれば、全記事を保存できます。
「アーカイブ」は非推奨です。

<html>
<head>
<base href="http://scripting.cocolog-nifty.com/blog/">
</head>
<body>
<iframe width="100%" height="100%" src="2009/12">
<iframe width="100%" height="100%" src="2009/11">
<iframe width="100%" height="100%" src="2009/10">
<iframe width="100%" height="100%" src="2009/09">
<iframe width="100%" height="100%" src="2009/08">
<iframe width="100%" height="100%" src="2009/07">
<iframe width="100%" height="100%" src="2009/06">
<iframe width="100%" height="100%" src="2009/05">
<iframe width="100%" height="100%" src="2009/04">
<iframe width="100%" height="100%" src="2009/03">
<iframe width="100%" height="100%" src="2009/02">
<iframe width="100%" height="100%" src="2009/01">
<iframe width="100%" height="100%" src="2008/12">
<iframe width="100%" height="100%" src="2008/11">
<iframe width="100%" height="100%" src="2008/10">
<iframe width="100%" height="100%" src="2008/09">
<iframe width="100%" height="100%" src="2008/08">
<iframe width="100%" height="100%" src="2008/07">
<iframe width="100%" height="100%" src="2008/06">
<iframe width="100%" height="100%" src="2008/05">
<iframe width="100%" height="100%" src="2008/04">
<iframe width="100%" height="100%" src="2008/03">
<iframe width="100%" height="100%" src="2008/02">
<iframe width="100%" height="100%" src="2008/01">
<iframe width="100%" height="100%" src="2007/12">
<iframe width="100%" height="100%" src="2007/11">
<iframe width="100%" height="100%" src="2007/10">
<iframe width="100%" height="100%" src="2007/09">
<iframe width="100%" height="100%" src="2007/08">
<iframe width="100%" height="100%" src="2007/07">
<iframe width="100%" height="100%" src="2007/06">
<iframe width="100%" height="100%" src="2007/05">
<iframe width="100%" height="100%" src="2007/04">
<iframe width="100%" height="100%" src="2007/03">
<iframe width="100%" height="100%" src="2007/02">
<iframe width="100%" height="100%" src="2007/01">
<iframe width="100%" height="100%" src="2006/12">
<iframe width="100%" height="100%" src="2006/11">
<iframe width="100%" height="100%" src="2006/10">
<iframe width="100%" height="100%" src="2006/09">
</body>
</html>

2009年12月10日 (木)

CScript.exe //E:{VBScript|JScript} - を代替する。

昔のWSHでは、以下のように標準入力からスクリプトを取り込めました。

CScript.exe //E:VBScript -
MsgBox "ほげ"
^Z

echo WScript.Echo('ほげ');|WScript.exe //E:JScript -

それを、"-"というファイルを作って代替します。

'';eval(WScript.StdIn.ReadAll());/*
Execute WScript.StdIn.ReadAll
Rem*/

2009年12月 7日 (月)

コマンドラインから、UACダイアログを出さずに「管理者として実行」する。

関連付けのRunAsを起動する方法では、UACダイアログが出ます。

SchTasksコマンドを使えば、サイレントに昇格できます。

「管理者として実行」された、タスクスケジューラやコマンドプロンプトからSchTasksコマンドでタスクを登録しておきます。

schtasks /create /tn hoge /tr "cmd" /sc once /st 00:00 /it /rl highest

「管理者として実行」されてない、バッチファイルなどのコマンドラインから、そのタスクを実行します。

schtasks /run /tn hoge

このとき、UACダイアログは出ません。

タスクスケジューラでは、/rl highestは、
■最上位の特権で実行する

2009年12月 6日 (日)

コマンドラインから非同期に起動したアプリやバッチを停止する。

Startコマンドで非同期に起動できますが、停止は、プロセスの特定がネックです。

もし、XPのPro以上、Vista以降なら、SchTasksコマンドが使えます。

タスクスケジューラやSchTasksコマンドでタスクを登録しておき、

schtasks /create /tn hoge /tr "hoge.exe" /sc once /st 00:00

バッチファイルなどのコマンドラインから、そのタスクを実行します。

schtasks /run /tn hoge

バッチファイルなどのコマンドラインから、そのタスクを停止します。

schtasks /end /tn hoge

2009年12月 5日 (土)

コマンドラインからアプリやバッチを非表示で実行する。(その3)

バッチファイルなどのコマンドラインからアプリやバッチを非表示で実行するには?

もし、XPのPro以上、Vista以降なら、SchTasksコマンドが使えます。

タスクスケジューラやSchTasksコマンドでタスクを登録しておき、

schtasks /create /tn hoge /ru user /rp password /tr "hoge.exe" /sc once /st 00:00

コマンドラインから、そのタスクを実行します。

schtasks /run /tn hoge

バッチファイルなら、まとめて書いておけます。

schtasks /create /tn hoge /ru user /rp password /tr "hoge.exe" /sc once /st 00:00
schtasks /run /tn hoge
schtasks /delete /tn hoge /f

ここで、もし、/ru /rp を指定しないと、/it を指定したのと同様に、表示されます。

2009年12月 3日 (木)

バッチファイルからRunAsコマンドを使う。(その3)

RunAsコマンドは、パスワードをコンソールから入力しないと使えません。
なので、バッチファイルからは、RunAsコマンドが使えません。

もし、XPのPro以上、Vista以降なら、SchTasksコマンドが使えます。

schtasks /create /tn hoge /ru user /rp password /tr "hoge.exe" /sc once /st 00:00
schtasks /run /tn hoge
schtasks /delete /tn hoge /f

2009年12月 1日 (火)

バッチファイルからRunAsコマンドを使う。(その2)

RunAsコマンドは、パスワードをコンソールから入力しないと使えません。
なので、バッチファイルからは、RunAsコマンドが使えません。

もし、PowerShell が入ってれば、RunAsコマンドが代替できます。

RunAsUser.cmd コマンド [引数...]

powershell -command "start-process 'cmd' '/c %x:"=\\\"%' -credential (new-object Management.Automation.PSCredential 'user', (ConvertTo-SecureString -AsPlainText -Force 'password'))"

« 2009年11月 | トップページ | 2010年1月 »