12.19.2017

[Windows] office365 Windows10 PowerShell接続方法

1.「IT プロフェッショナル 用 Microsoft Online Services サインイン アシスタント RTW」のインストール
下記サイトよりダウンロードする(32bit or 64bit)
https://www.microsoft.com/ja-jp/download/details.aspx?id=41950
ファイル名: msoidcli_64.msi

2.PowerShellの起動
PowerShellを右クリックし、「管理者として実行する」を選択し、起動する

3.実行ポリシーの変更
この設定は、コンピューターで一度だけ構成すれば、接続ごとに行う必要はない。
Set-ExecutionPolicy RemoteSigned

実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): Y

4.ExchangeOnlineへサインイン
$Livecred = Get-Credential
ポップアップ表示が出るので
[ID]****@****.co.jp / [Password] を入力

$SessionOption= New-PSSessionOption -ProxyAuthentication Negotiate -SkipRevocationCheck
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $LiveCred -Authentication Basic -AllowRedirection -SessionOption $SessionOption
Import-PSSession $Session

5.以後、コマンドを入力していく

6.ExchangeOnlineからサインアウト
セッションを終了しないと、セッションがタイムアウト時間まで保持され続けるため、設定が終わったら、ExchangeOnlineからのセッションを切断すること。
Remove-PSSession $Session

[Windows]Exchange カレンダーアクセス権 PowerShell コマンド

■ アクセス権限の種類
=========
1.  Owner : 所有者 : 共有フォルダー内のすべてのアイテムの作成、参照、変更、削除、およびサブフォルダーの作成が可能でございます。また、他のユーザーに対するアクセス権限の付与、変更、削除も可能でございます。
2.  PublishingEditor : 発行編集者 : すべてのアイテムの作成、参照、変更、削除、およびサブフォルダーの作成が可能でございます。
3.  Editor :  編集者 : すべてのアイテムの作成、参照、変更、削除が可能でございます。
4.  PublishingAuthor : 発行作成者 : アイテムの作成と参照、サブフォルダーの作成、および自身が作成したアイテムの変更と削除が可能でございます。
5.  Author : 作成者 : アイテムの作成と参照、および自身が作成したアイテムの変更と削除が可能でございます。
6.  NonEditingAuthor : 非編集作成者 : アイテムの作成と参照、および自身が作成したアイテムの削除。
7.  Contributor : 寄稿者 : アイテムの作成のみ。(動作検証を行いましたところ、予定表では予定のアイテムの作成自体が行えない動作を確認しました。None と類似する動作を確認しております。そのため、予定表をご利用いただく上では、Contributor 以外のアクセス権限をご利用いただけますと幸いでございます。)
8.  Reviewer :  参照者 : アイテムの参照のみ。(予定アイテムをダブルクリックし、詳細情報を参照することが可能でございます。)
9.  LimitedDetails : 空き時間情報、件名、場所 : 予定表共有の場合のみ、予定表イベントの空き時間情報、件名、および場所の参照が可能でございます。(予定アイテムをクリックすると、件名、場所、日時は表示されますが、ダブルクリックすることはできません。)
10. AvailabilityOnly : 空き時間情報 : 予定表共有の場合のみ、予定表イベントの空き時間情報の参照が可能でございます。(予定アイテムが [予定ありと表示されます。)
11. None : なし : 実行できる操作なし。ユーザーはアクセス権リストに残りますが、アクセス権限はなく、フォルダーは開くことができません。


PowerShell コマンドレットです。

①ExchangeOnlineへサインイン
$Livecred = Get-Credential
[ID]****@****.co.jp / [Password] を入力
$SessionOption= New-PSSessionOption -ProxyAuthentication Negotiate -SkipRevocationCheck
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $LiveCred -Authentication Basic -AllowRedirection -SessionOption $SessionOption
Import-PSSession $Session
②カレンダーアクセス権の確認コマンド
Get-MailboxFolderPermission -Identity "会議室名or会議室のメールアドレス:\予定表"

③カレンダーアクセス権の設定 以下はReviewer権限を与えるコマンドです。
Set-MailboxFolderPermission -Identity "会議室名or会議室のメールアドレス:\予定表" -AccessRights Reviewer -User '既定'
例)Set-MailboxFolderPermission -Identity "room:\calendar" -AccessRights Reviewer -User '既定'​

※予定表が見つかりませんといった赤文字のメッセージが表示された場合は、
[会議室名:\予定表]の箇所を[会議室名:\calendar]に置き換えて再度実行をしてみる。

④カレンダー表示一覧の状態確認コマンドです。
Get-CalendarProcessing -Identity "会議室名or会議室のメールアドレス" | fl
例)Get-CalendarProcessing -Identity "room" | fl

⑤カレンダー表示の設定変更コマンドです。
Set-CalendarProcessing -Identity "会議室名or会議室リソースのメールアドレス" -DeleteSubject 0 -AddOrganizerToSubject 1 -DeleteComments 0
例)Set-CalendarProcessing -Identity "room" -DeleteSubject 0 -AddOrganizerToSubject 1 -DeleteComments 0

表示される一覧のうち今回設定するのは以下の項目。
 DeleteSubject:スケジュールの件名を削除する
 AddOrganizerToSubject:件名に会議開催ユーザーの名前を付与する
 DeleteComments:本文を削除する
⑥ユーザーの追加設定コマンドです。
Add-MailboxFolderPermission -Identity "会議室名or会議室のメールアドレス:\予定表" -User "ユーザーのメールアドレスorグループ" -AccessRights Reviewer
例)Add-MailboxFolderPermission -Identity "room:\予定表" -User ***@****.co.jp -AccessRights Reviewer

⑦ユーザーの削除設定コマンドです。
​Remove-MailboxFolderPermission -Identity "会議室名or会議室のメールアドレス:\予定表" -User "ユーザーのメールアドレスorグループ"
例)Remove-MailboxFolderPermission -Identity "room:\予定表" -User ***@****.co.jp

⑧ExchangeOnlineからサインアウト
セッションを終了しないと、セッションがタイムアウト時間まで保持され続けるため、
設定が終わったら、ExchangeOnlineからのセッションを切断すること。
Remove-PSSession $Session

8.22.2017

[Windows] Batch 曜日取得方法

久しぶりに

ちょっとバックアップファイル削除用バッチを作成したのでメモ


/::::::::::::::::::::::::::::::::::::::::::/
@echo off

rem ------------------------
rem 概要
rem ------------------------
rem 土日はバックアップしない
rem 月火水木金はバックアップする

rem 月曜は先週分までを残す
rem 3世代(3日分)残す
rem 今日、昨日、一昨日

rem 今日、昨日、一昨日を取得
rem 曜日を取得
rem 先週の月曜の日付を取得

rem 水木金の場合、後ろ2日分を残す
rem 月火の場合、土日を抜いた後ろ2日分を残す
rem 木、金、月を残す
rem ------------------------

rem ===========================
rem 初期設定
rem ===========================
rem Backup File1 PATH
SET BF1=D:\BK\File1\

rem Backup File2 PATH
SET BF2=D:\BK\File2\

rem Backup File Name
SET BAK=*.bak

@REM 日付分割
SET YY=%date:~0,4%
SET MM=%date:~5,2%
SET DD=%date:~8,2%

rem ===========================
rem 今日の日付取得
SET HOY=_%YY%_%MM%_%DD%_

rem 閏年取得
Call :URUTOSHI %YY%

rem 今日の曜日取得
@REM 日付分割
SET Y1=%date:~0,2%
SET Y2=%date:~2,2%

@REM ゼロを補正
IF "0"=="%DD:~0,1%" SET DD=%DD:~1,1%
IF "0"=="%MM:~0,1%" SET MM=%MM:~1,1%

@REM 曜日計算(ツェラーの公式より)
rem 例:2017年 C=20, Y=17と置き換える
rem 2017年1,2月は、2016年13月1日・14月1日とする
rem 公式
rem h={d+[26(m+1)/10]+Y+[Y/4]+Γ} mod 7
rem Γ=5C+[C/4]

rem 1,2月のとき年月を変更
IF 1==%MM% (
  SET /A Y2=%Y2%-1
  SET /A M1=13
) ELSE IF 2==%MM% (
  SET /A Y2=%Y2%-1
  SET /A M1=14
) ELSE (
  SET /A M1=%MM%
)

SET /A P1=26*(%M1%+1)
SET /A P2=5*%Y1%+(%Y1%/4)
SET /A P3=%P1%/10
SET /A P4=%Y2%/4
SET /A P5=%DD%+%P3%+%Y2%+%P4%+%P2%
SET /A WW=%P5%%%7
rem echo "P1:"%P1%
rem echo "P2:"%P2%
rem echo "P3:"%P3%
rem echo "P4:"%P4%
rem echo "P5:"%P5%

@REM Week s m t w t f s
@REM %WW% 1 2 3 4 5 6 0
rem echo "曜日:"%WW%

@REM ゼロを補正
SET MM=0%MM%
SET MM=%MM:~-2%
rem SET DD=0%DD%
rem SET DD=%DD:~-2%

rem 昨日の日付取得
Call :1DAYAGO

rem 一昨日の日付取得
Call :2DAYAGO

if "%WW%"=="1" goto SUNDAY
if "%WW%"=="2" goto MONDAY
if "%WW%"=="3" goto TUESDAY
if "%WW%"=="4" goto WEDNESDAY
if "%WW%"=="5" goto THURSDAY
if "%WW%"=="6" goto FRIDAY
if "%WW%"=="0" goto SATURDAY

:SUNDAY
rem 金曜日と同じため、何もさせない
rem バックアップをしていない
goto END

:MONDAY
echo "月曜日"
rem 取得FRIDAY
SET /A NUM=3
Call :LASTWEEK %NUM%

rem 取得THURSDAY
SET /A NUM=4
Call :LASTWEEK %NUM%

rem 取得1週間前MONDAY
SET /A NUM=7
Call :LASTWEEK %NUM%
goto END

:TUESDAY
echo "火曜日"
rem 取得FRIDAY
SET /A NUM=4
Call :LASTWEEK %NUM%

rem 取得1週間前MONDAY
SET /A NUM=8
Call :LASTWEEK %NUM%
goto END

:WEDNESDAY
echo "水曜日"
rem 取得1週間前MONDAY
SET /A NUM=9
Call :LASTWEEK %NUM%
goto END

:THURSDAY
echo "木曜日"
rem 取得1週間前MONDAY
SET /A NUM=10
Call :LASTWEEK %NUM%

rem 取得今週MONDAY
SET /A NUM=3
Call :LASTWEEK %NUM%
goto END

:FRIDAY
echo "金曜日"
rem 取得1週間前MONDAY
SET /A NUM=11
Call :LASTWEEK %NUM%

rem 取得今週MONDAY
SET /A NUM=4
Call :LASTWEEK %NUM%
goto END

:SATURDAY
rem 金曜日と同じため、何もさせない
goto END
rem >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

:END
rem echo "今日"%HOY%
rem echo "昨日"%AYE%
rem echo "一昨日"%ANT%
rem echo "木曜"%JUE%
rem echo "金曜"%VIE%
rem echo "今月"%MON%
rem echo "先月"%LUN%
Call :FILE_DEL %BF1%
Call :FILE_DEL %BF2%

rem PAUSE
EXIT

rem :::::::::::::::::::::::::::::::::::::::::::::::::::
rem 関数
rem :::::::::::::::::::::::::::::::::::::::::::::::::::
:1DAYAGO
SET /A NUM=1
Call :LASTWEEK %NUM%
EXIT /B

:2DAYAGO
SET /A NUM=2
Call :LASTWEEK %NUM%
EXIT /B

:LASTWEEK
SET /A SP=%DD% - %1
SET SP=0%SP%
SET SP=%SP:~-2%

IF -==%SP:~0,1% (
  rem 先月取得
  Call :SENGETSU %1
rem ) ELSE IF 0==%SP:~0,1% (
) ELSE IF 00==%SP% (
  rem 先月取得
  Call :SENGETSU %1
) ELSE (
  IF 1==%1 (
    SET AYE=_%YY%_%MM%_%SP%_
  ) ELSE IF 2==%1 (
    SET ANT=_%YY%_%MM%_%SP%_
  ) ELSE IF 3==%1 (
    IF "5"=="%WW%" (
      SET MON=_%YY%_%MM%_%SP%_
    ) ELSE (
      SET VIE=_%YY%_%MM%_%SP%_
    )
  ) ELSE IF 4==%1 (
    IF "2"=="%WW%" (
      SET JUE=_%YY%_%MM%_%SP%_
    ) ELSE IF "3"=="%WW%" (
      SET VIE=_%YY%_%MM%_%SP%_
    ) ELSE IF "5"=="%WW%" (
      SET MON=_%YY%_%MM%_%SP%_
    ) ELSE IF "6"=="%WW%" (
      SET MON=_%YY%_%MM%_%SP%_
    )
  ) ELSE IF %1 GEQ 7 (
      IF %1 LEQ 11 (
        rem %1==7-11
        SET LUN=_%YY%_%MM%_%SP%_
      )
  )
)
EXIT /B

:SENGETSU
rem Call :SENGETSU %1(NUM)
IF 00==%SP% (SET SP=)
IF %MM%==01 (SET MA=12&& SET /A DA=31%SP%&& SET /A YA=%YY%-1)
IF %MM%==02 (SET MA=01&& SET /A DA=31%SP%&& SET YA=%YY%)
IF %MM%==03 (SET MA=02&& SET /A DA=28%SP%&& SET YA=%YY%&& IF %YMOD%==0 (SET /A DA=29%SP%))
IF %MM%==04 (SET MA=03&& SET /A DA=31%SP%&& SET YA=%YY%)
IF %MM%==05 (SET MA=04&& SET /A DA=30%SP%&& SET YA=%YY%)
IF %MM%==06 (SET MA=05&& SET /A DA=31%SP%&& SET YA=%YY%)
IF %MM%==07 (SET MA=06&& SET /A DA=30%SP%&& SET YA=%YY%)
IF %MM%==08 (SET MA=07&& SET /A DA=31%SP%&& SET YA=%YY%)
IF %MM%==09 (SET MA=08&& SET /A DA=31%SP%&& SET YA=%YY%)
IF %MM%==10 (SET MA=09&& SET /A DA=30%SP%&& SET YA=%YY%)
IF %MM%==11 (SET MA=10&& SET /A DA=31%SP%&& SET YA=%YY%)
IF %MM%==12 (SET MA=11&& SET /A DA=30%SP%&& SET YA=%YY%)

@REM Week s m t w t f s
@REM %WW% 1 2 3 4 5 6 0

IF 1==%1 (
  SET AYE=_%YA%_%MA%_%DA%_
) ELSE IF 2==%1 (
  SET ANT=_%YA%_%MA%_%DA%_
) ELSE IF 3==%1 (
  IF "5"=="%WW%" (
    SET MON=_%YA%_%MA%_%DA%_
  ) ELSE (
    SET VIE=_%YA%_%MA%_%DA%_
  )
) ELSE IF 4==%1 (
  IF "2"=="%WW%" (
    SET JUE=_%YA%_%MA%_%DA%_
  ) ELSE IF "3"=="%WW%" (
    SET VIE=_%YA%_%MA%_%DA%_
  ) ELSE IF "5"=="%WW%" (
    SET MON=_%YA%_%MA%_%DA%_
  ) ELSE IF "6"=="%WW%" (
    SET MON=_%YA%_%MA%_%DA%_
  )
) ELSE IF %1 GEQ 7 (
  IF %1 LEQ 11 (
    rem %1==7-11
    SET LUN=_%YA%_%MA%_%DA%_
  )
)
EXIT /B

:URUTOSHI
rem 閏年(閏年の場合はYMOD=0)
rem 年を4で割った余りをYMODに取得
SET /A YMOD=%1 %% 4

rem 余りがない(4の倍数である)
IF "%YMOD%"=="0" (
   rem 年を100で割った余りを取得
   SET /A YMOD_100=%1 %% 100

   rem 100で割りきれているか
   IF !YMOD_100!==0 (
      rem 年を400で割った余りを取得
      SET /A YMOD_400=%1 %% 400

      REM 400で割り切れていない場合(2100年など)
      IF NOT !YMOD_400!==0 (
         REM 閏年を無に設定
         SET /A YMOD=1
      )
   )
)
EXIT /B

:FILE_DEL
rem 対象ディレクトリを検索後、ファイルを削除
for /r %1 %%A in (%BAK%) do (
   rem 今日分を除く
   echo %%A | find "%HOY%" >NUL
   if errorlevel 1 (
     rem 昨日分を除く
     echo %%A | find "%AYE%" >NUL
     if errorlevel 1 (
       rem 一昨日分を除く
       echo %%A | find "%ANT%" >NUL
       if errorlevel 1 (
         rem 先週の月曜を除く
         echo %%A | find "%LUN%" >NUL
         if errorlevel 1 (
           rem 今週の月曜を除く
           echo %%A | find "%MON%" >NUL
             if errorlevel 1 (
               rem 金曜を除く
               echo %%A | find "%VIE%" >NUL
               if errorlevel 1 (
                 rem 木曜を除く
                 echo %%A | find "%JUE%" >NUL
                 if errorlevel 1 (
                   rem echo %%A
                   DEL /Q %%A
                 )
               )
             )
          )
       )
     )
   )
)
EXIT /B

/::::::::::::::::::::::::::::::::::::::::::/
以上