X



お前ら、wsh使ってますか? Part8
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001名無し~3.EXE
垢版 |
2010/12/19(日) 22:20:35ID:SZFqF39w
こんなことコンピュータにやらせろよ。そう思ったことはありませんか?
簡易的な実行環境も含めて普通のOSだったら当たり前に備わっている自動実行。
Windowsの標準に備わっているそれがWSH(Windows Script Host)です。
また、ここではWSHだけに限らずWMI、ADSIなどのネタもOKです。

・煽りや荒らしは無視の方針で。基本的にsage進行です。

・ここでヒントを得て完成したスクリプトは、出来れば皆さんにお披露目してください。
 同じことで悩んでいる人のためになります。

・質問する際は、OS及び使用するコンポーネントのバージョンもお忘れなく。

前スレ
お前ら、wsh使ってますか? Part7
http://hibari.2ch.net/test/read.cgi/win/1190548945/
0894名無し~3.EXE
垢版 |
2016/06/20(月) 19:48:39.36ID:r7gHHjMI
おいぽまいら教えろ下さい、dotnetのライブラリを叩く際にだね

これは動かない
var random = new ActiveXObject("System.Random");
random.Next(1, 10);

これは動く
var random = new ActiveXObject("System.Random");
random.Next_2(1, 10);

上が動かないのは分かる、型宣言が出来ないからだ
じゃあ下は何故動くんだ、この_2は何を意味するの
0896名無し~3.EXE
垢版 |
2016/06/20(月) 21:44:37.70ID:r7gHHjMI
ああ何となく事故解決した、オーバーロードなんて仕様ないからケツに数字付けて区別するのか
型宣言とか全く関係なかった、数字の振り方の規則性がこれまたよく分からんがトライアンドエラーしかないのか

ちなみにSystem.Randomだとこうなるみたい
Next()→Next()
Next(Int32)→Next_3(Int32)
Next(Int32, Int32)→Next_2(Int32, Int32)
0897名無し~3.EXE
垢版 |
2016/07/18(月) 13:49:40.77ID:FluRcm0P
すみません、全くの素人です。

アプリのアプリケーションキーの「(T)」を出力するだけのファイルを作りたいです。
どう書いたらいいですか。
0898名無し~3.EXE
垢版 |
2016/07/18(月) 14:58:15.83ID:FluRcm0P
自己解決

Set objShell = WScript.CreateObject("WScript.Shell")
WScript.Sleep 50
objShell.SendKeys "%(T)"
0899名無し~3.EXE
垢版 |
2016/07/20(水) 11:55:20.08ID:XFWp37Gp
vbsを使って社内システムへの自動ログイン処理をしたいと思っています。

yahooへは問題なくidpassを入れてログインできるのですが、社内システムの場合はエラーが表示されidpassも表示されません。
"エラーを特定できません"のエラーが表示されます。

どうも信頼済みサイトに登録されていることが原因というようなwebの記載を見つけました。
この場合は回避策はないのでしょうか。
0900名無し~3.EXE
垢版 |
2016/08/15(月) 00:25:29.97ID:TKUFVv53
クリップボードを加工する処理を書いています
内部はユニコードなので
SJISの範囲を越えた文字がクリップボードに入っていることがあります
それをEchoで表示させてみたりしても普通に表示されますし
文字列の結合をしても特に問題ないようです
しかしソースコードがSJISなので、
その文字に関する処理をソースコードの中に書けません
こういう場合どうするのがいいでしょうか?
クリップボードへのアクセスをUTF-8に出来たら
コードもUTF-8に出来るのですが、この処理はSJIS決め打ちですよね?
0901名無し~3.EXE
垢版 |
2016/08/15(月) 01:25:58.62ID:ikN7gcf7
>>900
案1:スクリプトをunicodeで書く。
案2JScript:SJISに無い文字は String.fromCharCode(code1, code2, ...) を使う。
案3VBScript:SJISに無い文字は ChrW(code) を使う。
0902名無し~3.EXE
垢版 |
2016/08/15(月) 02:20:04.30ID:TKUFVv53
>>901
ありがとうございます
案2で行きました
0903名無し~3.EXE
垢版 |
2016/08/28(日) 13:24:08.21ID:F3dIMYRn
// 以下のような例で * が消えてしまうのはなぜでしょうか? バグ?
var FS = WScript.CreateObject('Scripting.FileSystemObject');
WScript.Echo(FS.GetAbsolutePathName('C:\\Windo*'));// → C:\Windo*
WScript.Echo(FS.GetAbsolutePathName('C:\\Window*'));// → C:\Windows …なぜ?
WScript.Echo(FS.GetAbsolutePathName('C:\\Windows*'));// → C:\Windows*
0905名無し~3.EXE
垢版 |
2016/08/28(日) 22:43:27.34ID:Kf2zaCfx
*が1文字のワイルドカードとして使えるということかね。
0906名無し~3.EXE
垢版 |
2016/09/20(火) 18:40:36.65ID:sx0yUGEz
2016/9/1 jscript.dll がwindows updateされたせいで
今までいけていた win7/32bit(@職場)/wsh(jscript)で
エラーが多発するのは俺だけ?
0908名無し~3.EXE
垢版 |
2016/09/20(火) 21:20:41.02ID:SISECv8l
まずそのエラーを書かない事には何とも
0909906
垢版 |
2016/09/22(木) 00:14:32.72ID:rDMTp48z
そうですよね。失礼しました。

こちらも、職場でのエラーメッセージまで覚えていないので
解決はあきらめて、情報をカキコだけしますが。

エクセルでInputBoxを使うやつで、
変数のvar 宣言が厳密?になったような印象で
動くやつとエラーで動かないやつとInputBoxが出ないパターンあるような。

var objXL = WScript.CreateObject("Excel.Application");
var fs = WScript.CreateObject("Scripting.FileSystemObject");
var f = fs.GetFolder("\\\\file01\\○○課\\....\\Afoldername");
var folderlist = "";
//すべてのサブフォルダ
var subfc = new Enumerator(f.SubFolders);
for(; !subfc.atEnd(); subfc.moveNext())
if ( ((subfc.item().Name+"").indexOf("e"))==-1 ) folderlist += subfc.item().Name + "\r\n" ;
var strRet = objXL.InputBox(folderlist, "選択", "otamesi");
objXL.Quit();
のたぐいのやつです。

こんなことがあったということで。
0910名無し~3.EXE
垢版 |
2016/09/28(水) 07:10:47.91ID:f6JqvkoF
Windows7にて、管理者権限(High)で起動しているプログラムから、
別のプログラムを標準ユーザー権限(Medium)で実行する方法はないでしょうか?
具体的には、
管理者権限で常駐しているAutoHotkeyから、
標準ユーザー権限でWSHスクリプトを起動したいと考えています。

管理者昇格で実行する方法は検索すれば出てくるのですか、
その逆は見つからなくて・・・

ログオンスクリプトから実行されたプログラムも
全部管理者権限になってしまいます。
これも解決したいと思っています。
0911名無し~3.EXE
垢版 |
2016/09/28(水) 09:32:39.60ID:s4DNr100
runas 使うとかじゃダメ?
0912名無し~3.EXE
垢版 |
2016/09/28(水) 15:53:59.78ID:nx81DFKK
「管理者として実行」されたコマンドラインから、「標準ユーザとして実行」する。
ttp://scripting.cocolog-nifty.com/blog/2010/01/post-5259.html
0913名無し~3.EXE
垢版 |
2016/09/28(水) 18:43:38.23ID:f6JqvkoF
>>912
ありがとうございます!まさにこれです。
しかしタスクから実行とは・・・
やっぱり降格実行って、すんなりには出来ないんですね

>>911
それは多分、ShellExecuteを使った昇格(Middle→High)のやり方だと。
WSHでは、Runでも、Execでも、ShellExecute でも
降格で実行する方法はありませんでした(探せませんでした)
0914名無し~3.EXE
垢版 |
2016/09/29(木) 00:25:50.89ID:bbWzxn0/
>>913
> >>911
> それは多分、ShellExecuteを使った昇格(Middle→High)のやり方だと。
コマンドラインのことじゃないの?
試したことないから実際できるかは知らないけど
0915名無し~3.EXE
垢版 |
2016/09/29(木) 21:34:09.19ID:QE0CrBwY
CreateObject("Shell.Application").ShellExecute("hoge.exe", "", "", "runasuser")

>>912と違ってユーザー名とパスワードを入力する必要があるのが面倒
0916名無し~3.EXE
垢版 |
2016/09/30(金) 07:05:04.86ID:DKhen0Tu
>>915
> CreateObject("Shell.Application").ShellExecute("hoge.exe", "", "", "runasuser")

おお、runasuser という引数で可能だったのですね。
今まで知りませんでした。ありがとうございます。
確かにユーザとパスの入力にはリスクがありますし、配布には不向きですが、
場合によって使えそうです。
0917名無し~3.EXE
垢版 |
2016/09/30(金) 11:04:40.80ID:MzJ4FbY1
>>913
解決しているようですが、>>911 は RunAs.exe を使うことを意味していたつもりでした。
0918名無し~3.EXE
垢版 |
2016/10/01(土) 21:18:50.03ID:z3fhfQ4h
>>917
ありがとうございます。
runas.exeという存在も知りませんでした・・・。
確かにこの方法でも、/userをAdmin以外に指定すれば、
High→Mediumの降格は可能みたいですね!
でもやはり、userとpassまで入力するのがネックですね。
むしろこっちが当たり前で、912の方法はかなり特殊な方法でしょうか。
0919名無し~3.EXE
垢版 |
2016/10/02(日) 14:05:33.18ID:ssU5pWdi
runasに/savecredオプションを付けるとパスワードが保存されるから
2回目以降はパスワードを入力しなくてよくなる

psexecってツールならユーザー名とパスワードをオプション引数で指定できるから毎回手打ちする必要は無くなる
https://technet.microsoft.com/ja-jp/sysinternals/bb897553.aspx

もちろんそれぞれデメリットもあるからご利用は計画的に
0920名無し~3.EXE
垢版 |
2016/10/20(木) 14:58:50.51ID:u2LLUbWG
えと、Windows7環境で質問です。

あるアプリが起動している間は、スリープに入らないって
設定ができるでしょうか?
ファイルメーカーなんですが、スリープしちゃうとネット
ワークが切れちゃって再起動しなくてはならないんで。
0921名無し~3.EXE
垢版 |
2016/11/10(木) 23:44:30.12ID:JhfwFP09
>>920

5分ごとにShiftを押す。じゃダメ?ctrl+Cで終了。

Set objShell = WScript.CreateObject("WScript.Shell")
Do
WScript.Sleep 1000*60*5
objShell.SendKeys "+"
Loop

メディアプレイヤーをずっと再生しておくっていう手もあるらしい。
0923名無し~3.EXE
垢版 |
2016/12/12(月) 21:47:31.56ID:r+Fb96AV
超亀レスだがShiftじゃキー入力の妨げになるでしょ
マウスの空MOVEを定期的に送るのが常套手段
もろちんwshだけでやる方法はない
0924名無し~3.EXE
垢版 |
2016/12/25(日) 00:05:54.11ID:HRoYEPWv
/*
cscript.exe //nologo 特定プロセス実行中のスリープを抑止.js

副作用無しの SendKeys(
0925名無し~3.EXE
垢版 |
2016/12/25(日) 00:23:26.11ID:HRoYEPWv
Shiftの代わりにPRTSC(キャプチャ効果無し)を送ってもスリープを抑止できるようだ
0926924
垢版 |
2016/12/29(木) 22:26:32.94ID:dAnL9MtL
先日何故か書き込みが途切れたので再書き込み

var exeName = "notepad.exe";
var interval = 60;
var oShell = WScript.CreateObject("WScript.Shell");
var objWMIService = GetObject("winmgmts://./root/cimv2");
while(true){
if(!new Enumerator(objWMIService.ExecQuery("select Name from Win32_Process where Name='" + exeName + "'")).atEnd())
oShell.SendKeys("{PRTSC}");
WScript.Sleep(1000 * interval);
}

WMIって面白い
0927名無し~3.EXE
垢版 |
2017/03/11(土) 22:14:40.13ID:+HikkRSv
JScriptで再帰的なマッチを高速に行う方法ってありませんかね?
A(B(C(3),"a"),"$")
みたいな文字列を
({<3>,"a"},"$")
みたいにしたいです。Rubyみたいに再帰処理に対応した正規表現を
持っていれば対応する括弧をマッチさせることが出来ますが・・・
0928名無し~3.EXE
垢版 |
2017/05/11(木) 19:46:31.75ID:MLlLpRGo
2017.5.15に今どき、wshの本の改訂版が今ごろ出版されるとか。
0929名無し~3.EXE
垢版 |
2017/06/29(木) 16:33:55.92ID:AAx8eHDl
>>886の件、
レジストリのCLSID(classid)を、登録した方から登録してない方へコピーするか、
wscファイルの中でCLSIDを指定しておけば、両方で使えた。

思うに、レジストリ上では、ProgID(COMコンポーネントID)は64/32bitで共通なのに対し、
CLSIDは64/32bitそれぞれで登録されているところ、
CLSIDはwsc登録時にランダムで生成されるため、
後から登録した方でProgIDのCLSID情報が異なる値で上書きされてしまい、
先に登録した方はProgIDから元々CLSIDにたどり着けなくなってしまった、
ということなのかなと。

なので、CLSIDが64/32bitで同じになるようにしてやればよいと。
0930名無し~3.EXE
垢版 |
2017/07/18(火) 13:58:28.60ID:W4IZXMNS
関数呼び出し、ネスト2,3回位が限界なのかな。
変なところで戻ってくる。

使えない野郎だ、くっそマイクロソフトw
0931名無し~3.EXE
垢版 |
2017/09/02(土) 18:09:03.77ID:/D3h/gh4
今更javascriptの学習兼ねてjscript勉強中
inputboxとmsgboxが64bit環境で呼び出せないのが割と辛いね
powershellだとC#埋め込んだりフォーム使い放題なんだよなー

↑スリープ抑止はC/C++/C#でさくっと空SendInput呼んだ方が楽だよ
0932名無し~3.EXE
垢版 |
2017/09/25(月) 23:32:59.00ID:6nblRiV8
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder("C:\Logs")
Wscript.Echo objFolder.Size
 →これでC:\Logsのフォルダサイズが取得できるのに

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder("C:\Program Files")
Wscript.Echo objFolder.Size
 →同じスクリプトでC:\Program Filesのサイズが取得できない

なぜなんだぜ? 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0933名無し~3.EXE
垢版 |
2017/09/26(火) 02:12:19.86ID:RcmZZAIw
管理者権限で実行しても "C:\Program Files\Windows NT" に含まれるジャンクションにアクセス失敗してエラーになるみたい
0934名無し~3.EXE
垢版 |
2017/09/26(火) 21:58:19.45ID:W9uZsk3X
情報ありがとう
こちらでも昨夜というか今朝まで調べて
配下にリバースポイントが含まれるフォルダは
(普通の方法では)サイズの取得ができないとわかったよ

Program Files配下の全フォルダを抽出して
ひとつずつ再帰的にサイズ取得して合計するという案もあったけど
その中にはサイズが取得できないフォルダがあるから
合計したところで数値が合わないんだよね
0935名無し~3.EXE
垢版 |
2017/09/26(火) 22:00:02.58ID:W9uZsk3X
仕方ないのでバッチファイルで
dir "C:\Program Files" /s /a-d | find "個のファイル" > hoge.txt
ってやって、ファイル末尾の1行を取得する事にしたわ
これだと一応、フォルダのプロパティで見たのと同じ値が取得できる
もはやスクリプトじゃなくなっちまったけども
0936名無し~3.EXE
垢版 |
2017/09/26(火) 22:16:48.97ID:tsUdupnX
重箱の隅をつつくようであれだが、リパースポイントな。リバースじゃなく。
0937名無し~3.EXE
垢版 |
2017/12/12(火) 09:06:04.43ID:q0vNjYcg
wshで数万行クラスの巨大スクリプト書く人いるかな?

自分で使うちょっとした自動処理ならわずか数行〜数十行程度で済むが、他人にあげることを
想定したものならファイルパス等のハードコードは絶対に避けてコマンドライン引数やXML形式の
設定ファイルから指定させる等汎用性を高めたり、きちんとエラー対策をとったり等、れっきとした
「アプリ」として「開発」するため余裕で数千〜数万行に達してしまう。
0938名無し~3.EXE
垢版 |
2017/12/12(火) 11:04:42.32ID:/U3t7lMx
自分で使う自動処理が拡張に拡張重ねて数万行クラスになったのはあるよ
0939名無し~3.EXE
垢版 |
2017/12/12(火) 11:13:16.48ID:Wr10bU9d
数万行もあるスクリプトを貰っても持て余すなあ
もっと機能を絞って分割するなりして欲しいもんだ
0940名無し~3.EXE
垢版 |
2017/12/12(火) 20:43:33.07ID:jyIq4w4s
せいぜい数百から一千行程度に小分けしたスクリプト50本くらいを
ひとつのフォルダに入れて連携させてるよ
小分けしとくと色々使い回しがきいてラクだわ
0941名無し~3.EXE
垢版 |
2017/12/12(火) 21:53:43.20ID:qOP7vFik
>>937
> 余裕で数千〜数万行に達してしまう

ScriptControlで動的にWSHのソースを読み込んで実行するタイプなら普通
0942名無し~3.EXE
垢版 |
2017/12/13(水) 14:27:28.65ID:KehnvMoz
特に、Classの継承機能のないVBScriptで無理やりオブジェクト指向な
コードを書こうとして、似たような構造のClassを作るため親Classを
コピペしてちょっと改造するって手法を繰り返してたら、
あっという間に数千行に達してしまう
0943名無し~3.EXE
垢版 |
2017/12/14(木) 12:08:32.08ID:bq3yY9Fc
それはあるね。コピペ部分が結構多くて行数だけインフレしてる感じ
0944名無し~3.EXE
垢版 |
2017/12/19(火) 12:46:08.14ID:uzBHC9yI
友達がWindowsで稼げている情報など。ニュースというか参考までに。
⇒ http://kuchibeta.sblo.jp/article/181868190.html

興味がある方のために書きました。

M60W6DP7X5
レス数が900を超えています。1000を超えると表示できなくなるよ。

ニューススポーツなんでも実況