指定の日時(年月日時分秒)にスリープ復帰日時を設定するAppleScriptです。
過去に掲載した記事の再掲載分ですが、以前に掲載したリストにバグが見つかったので修正しておきました。サブルーチン内でパラメータの変数と同じ名前の変数に代入してしまい、計算結果がおかしくなるという超恥ずかしいバグでした。
AppleScript名:スリープ復帰日時を設定する v2 |
use AppleScript version "2.4" use scripting additions use framework "Foundation" set aYear to 2018 –年 set aMonth to 10 –月 set aDate to 30 –日 set aHour to 7 –時 set aMinute to 1 –分 set aSecond to 2 –秒 set myAccount to do shell script "whoami" –他に管理者アカウントを指定することも可。その場合にはmyPasswordには管理者のパスワードを指定 set myPassword to "" –パスワード(カラのままでOK。必要に応じてAS側からダイアログ入力を求める) set pRes to setAwakeDate(aYear, aMonth, aDate, aHour, aMinute, aSecond, myAccount, myPassword) of me –スリープからの復帰日時を設定する on setAwakeDate(aYear, aMonth, aDate, aHour, aMinute, aSecond, myAccount, myPassword) if myPassword = "" then set myPassword to text returned of (display dialog "パスワードを入力してください" default answer "" with hidden answer) end if –現在のユーザーに管理権限がない場合にはリターン if getUsersPrivileges(myAccount) of me = false then return false –過去の日時を指定していたら設定しない(過去掲載時にここが間違っていたので修正) set tmpDate to getDateInternational(aYear, aMonth, aDate, aHour, aMinute, aSecond, "JST") if ((current date) > tmpDate) then return false –数値の整形(日付) set tYear to retZeroPaddingText(aYear, 2) of me set tMonth to retZeroPaddingText(aMonth, 2) of me set tDate to retZeroPaddingText(aDate, 2) of me –数値の整形(時刻) set tHour to retZeroPaddingText(aHour, 2) of me set tMinute to retZeroPaddingText(aMinute, 2) of me set tSecond to retZeroPaddingText(aSecond, 2) of me set tDateStr to (ASCII character 34) & tMonth & "/" & tDate & "/" & tYear & " " & tHour & ":" & tMinute & ":" & tSecond & (ASCII character 34) try set sRes to (do shell script "/usr/bin/pmset schedule wake " & tDateStr user name myAccount password myPassword with administrator privileges) on error erMes return erMes –時間を過去に設定したか、あるいは数値の範囲指定エラー。パスワードの指定ミスの可能性もあり得る end try return true end setAwakeDate –指定ユーザーの権限を得る(管理者か、それ以外か) 10.4および10.5以降両用 –管理者だとtrueが、それ以外だとfalseが返る on getUsersPrivileges(aUser) set aVer to system attribute "sys2" –OSメジャーバージョンを取得する(例:Mac OS X 10.6.4→6) set current_user to aUser if aVer > 4 then –Mac OS X 10.5以降の処理 set adR to (do shell script "/usr/bin/dsmemberutil checkmembership -U " & current_user & " -G admin users") if adR = "user is a member of the group" then return true else return false end if else –Mac OS X 10.4までの処理 set admin_users to (do shell script "/usr/bin/niutil -readprop . /groups/admin users") tell (a reference to AppleScript’s text item delimiters) set {old_atid, contents} to {contents, " "} set {admin_users, contents} to {text items of admin_users, old_atid} end tell if current_user is in admin_users then return true else return false end if end if end getUsersPrivileges –数値にゼロパディングしたテキストを返す on retZeroPaddingText(aNum, aLen) set tText to ("00000000" & aNum as text) set tCount to length of tText set resText to text (tCount – aLen + 1) thru -1 of tText return resText end retZeroPaddingText –Make a GMT Date Object with parameters from a given time zone. on getDateInternational(aYear, aMonth, aDay, anHour, aMinute, aSecond, timeZoneAbbreviation) set theNSCalendar to current application’s NSCalendar’s currentCalendar() theNSCalendar’s setTimeZone:(current application’s NSTimeZone’s timeZoneWithAbbreviation:(timeZoneAbbreviation)) set theDate to theNSCalendar’s dateWithEra:1 |year|:aYear |month|:aMonth |day|:aDay hour:anHour minute:aMinute |second|:aSecond nanosecond:0 return theDate as date end getDateInternational |
More from my site
(Visited 60 times, 1 visits today)