モズク食べる

雑食雑記

配布グループメンバー一覧取得powershell

配布グループとメンバー一覧取得スクリプト作った

 Microsoft365の配布グループの名前とメンバーを一発でリスト化したい!

えーとGet-DistributionGroupコマンドとGet-DistributionGroupMemberコマンドを…

それぞれcsvに出してExcelで何とかして…って面倒くさ!

そんな時に使えるpowershellスクリプトを作りました。

 

特徴

動作確認済みExchangePowerShellスクリプトです。

"配布グループ名","メンバーのアカウント名","メンバーのUPN"リストを出力します。

メンバーが0人の配布グループもリストに含めます。

実行中は進捗率が表示されます。

出力ファイルは、Excelで開くことを想定しています。

 

Powershell script for getting distribution groups and members.

Output also includes distribution groups with no members.

The progress rate is displayed while the script is running.

You open the output file in Excel.

 

PowerShellスクリプト初心者のためコードに改良の余地があります。

 

使い方

f:id:mozukuino:20210727202627p:plain

 

  • ExchangeOnlineに接続する。初回の場合モジュールもインストールする。powershell画面で下記3コマンドを実行
Set-ExecutionPolicy RemoteSigned
Install-Module -Name ExchangeOnlineManagement
Connect-ExchangeOnline

※確認画面が出たときは「はい」を選択。

※認証画面ではExchange管理者権限のあるアカウント情報を入力する。

 

  • 「ファイル」→「新規作成」をクリック

f:id:mozukuino:20210727202914p:plain

 

  • 新しく出現した白い方の画面にこのスクリプトをコピペする
$distributionGroups = Get-DistributionGroup -ResultSize Unlimited -RecipientTypeDetails MailUniversalDistributionGroup
$totaldistributionGroups =  $distributionGroups.count
$cnt=0
$nomember =""

foreach($distributionGroup in $distributionGroups) {

$cnt ++

    $g = $distributionGroup.PrimarySmtpAddress
    $q = Get-DistributionGroupMember $g -ResultSize Unlimited

      if ( $null -eq $q ){
        $nomember += $g + "`n"
        continue
        }

    else{
    Get-DistributionGroupMember $g -ResultSize Unlimited | 
        Select-Object @{Label="GroupName";
                        Expression={$g}},
                        DisplayName, 
                        PrimarySmtpAddress|
                        Export-Csv -Encoding UTF8 (join-path "C:\temp\" ("DistributionGroupMemberList" + (get-date).AddHours(9).ToString("yyyyMMdd") + ".csv")) -Append
    }
    $p = [Math]::Truncate($cnt/$totaldistributionGroups *100)
    $status = "$cnt / $totaldistributionGroups DistributionGroup"
    Write-Progress -activity "progress" -status $status -percentComplet $p 

}
Write-Output  $nomember| Out-file -Encoding UTF8 (join-path "C:\temp\" ("DistributionGroupMemberList" + (get-date).AddHours(9).ToString("yyyyMMdd") + ".csv")) -Append

 

  • Cドライブ直下にtempフォルダを用意する


スクリプト側を変更してもOK。フォルダパスはここで指定している

f:id:mozukuino:20210727221911p:plain

f:id:mozukuino:20210727211944p:plain

 

 出力結果

Excelで開くとこんな感じです。

f:id:mozukuino:20210727223356p:plain

test1,2,3@demo…はユーザアカウントです。

ドメイン名はダミーに置き換えています。

 

 

Unityでフリックした方向へ画像を動かしたい

Unityでフリックした方向へ画像を動かしたい

【目的】

Unityを使ってパズルゲームを作成しようとしています。 そこでまずは、 フリックした方向へ画像が動く部分を作成してみました。

 

【結果】

なんとかできました。が、方法が色々あって、結構混乱しました。

初心者的にはやりたい内容がそのまま書かれている記事が欲しい(あまえんな)

ちなみにアセットだとこれがいいみたい。

assetstore.unity.com

 

◆手順

【完成イメージ】

画面を上下左右にフリックすると、画像がフリックした方向へポンっと移動します。

 f:id:mozukuino:20190401001244g:plain

※今は画面のどこをフリックしてもOKになっています。

 これでは困るので次はこのGIFみたいに画像をフリックするようにしたいです。

 

C#スクリプト

先人様が書かれたコードをありがたく拝借しています。9割引用です。 ただそのままでは動かなかったので、動いたコードを貼っておきます。  

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GameManager : MonoBehaviour
{

    public GameObject TileA;

    // Use this for initialization
    void Start()
    {
    }

    // Update is called once per frame

    private Vector3 touchStartPos;
    private Vector3 touchEndPos;

    void Update()
    {

        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            touchStartPos = new Vector3(Input.mousePosition.x,
                                        Input.mousePosition.y,
                                        Input.mousePosition.z);
        }

        if (Input.GetKeyUp(KeyCode.Mouse0))
        {
            touchEndPos = new Vector3(Input.mousePosition.x,
                                      Input.mousePosition.y,
                                      Input.mousePosition.z);
            GetDirection();
        }
    }

        void GetDirection()
        {
            float directionX = touchEndPos.x - touchStartPos.x;
            float directionY = touchEndPos.y - touchStartPos.y;
            string Direction = null;

            if (Mathf.Abs(directionY) < Mathf.Abs(directionX))
            {
                if (30 < directionX)
                {
                    //右向きにフリック
                    Direction = "right";
                }
                else if (-30 > directionX)
                {
                    //左向きにフリック
                    Direction = "left";
                }
            }
            else if (Mathf.Abs(directionX) < Mathf.Abs(directionY))
            {
                if (30 < directionY)
                {
                    //上向きにフリック
                    Direction = "up";
                }
                else if (-30 > directionY)
                {
                    //下向きのフリック
                    Direction = "down";
                }
            }
            else
            {
                //タッチを検出
                Direction = "touch";
            }
            switch (Direction)
            {
                case "up":
                    //上フリックされた時の処理
                    TileA.transform.position += new Vector3(0, 100, 0);
                    break;

                case "down":
                    //下フリックされた時の処理
                    TileA.transform.position += new Vector3(0, -100, 0);
                    break;

                case "right":
                    //右フリックされた時の処理
                    TileA.transform.position += new Vector3(100, 0, 0);
                    break;

                case "left":
                    //左フリックされた時の処理
                    TileA.transform.position += new Vector3(-100, 0, 0);
                    break;

                case "touch":
                    //タッチされた時の処理
                    break;

            }
        }
    }

動いたので、これでいいのだと思うのですが Update()に一部を入れるなんて書いてないのでマズイことをしているのかも…。 不安。

◆参考にさせていただいたサイト。先人に感謝

qiita.com

utage.headwaters.co.jp

Windows10にTensorFlow-gpuを導入できた話

◆目的

GPUを用いてTensorFlowを学習するため、

Windows10環境にTensorFlow-gpuを導入しました。

◆結果

紆余曲折ありましたが、何とか確認用コードが動作しました。

正しい環境かどうかは分かりません。(もしかすると少数派かも)

 

とにかく、峠を超えられた気がするので、一旦記事にします。

※一部セオリーとは異なっていると思います。

※セオリー通りで出来ない勢(自分含む)の力になれれば幸いです。

【ハード環境】

・Windows10 Home 64bit 

・intelCore i7-8700

・32GBメモリ

GeForce GTX 1080 ※ドライバ最新化済

【ソフトウェア】

・Anaconda Navigator 1.9.6

・CUDA 9.2

・cuDNN v7.4.1 (Nov 8, 2018), for CUDA 9.2

 

◆手順

【CUDA,cuDNN用意】

まずCUDA。2ファイルともダウンロードします。

CUDA Toolkit 9.2 Download | NVIDIA Developer

f:id:mozukuino:20190114053450p:plain

cuDNN v7.4.1 (Nov 8, 2018), for CUDA 9.2。

cuDNN Archive | NVIDIA Developer

f:id:mozukuino:20190114053832p:plain

CUDA9.2のインストールは

「Base Installer」、「Patch 1」の順番に実行するだけでOK。

 

cuDNNの方は一旦、適当なフォルダに解凍しておいたものを

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2

へ上書きコピーすれば完了。※画像は9.0です。読み替えて下さい

f:id:mozukuino:20190114054201p:plain

 

 

【Anaconda環境用意】

Downloads - Anaconda

f:id:mozukuino:20190114052032p:plain

インストール後、最新版へ更新。

下図はAnaconda起動時にでた画面から更新した時の画像です。

f:id:mozukuino:20190114052154p:plain

起動後、「Encitoments」を選択肢、「Create」をクリック。

f:id:mozukuino:20190114052544p:plain

環境名(何でも良い)を入力、「Python3.6」を選択して「Create」

f:id:mozukuino:20190114052600p:plain

作成された環境をクリックし(読み込み時間がある場合は数秒待機)

右の三角をクリックし、リストから「OpenTerminal」を選択。

f:id:mozukuino:20190114052947p:plain

 

【TensorFlow-gpu インストール】

Anacondaで「Open Terminal」を押して起動したターミナルにて、

conda install tensorflow-gpu

を実行。※画像はログの一部です。数分かかります。

f:id:mozukuino:20190114054648p:plain

途中で「Proceed?([y],n)?」と出るので「y」を入力。

完了後、動作確認を行います。

python

import tensorflow as tf

hello = tf.constant('Hello, TensorFlow!')

sess = tf.Session()

print(sess.run(hello))

f:id:mozukuino:20190114055243p:plain

こんなログだと成功です。exit()で動作確認終了します。

 

【Jupyterインストール】

※JupyterNotebookを使わない場合は不要です。

conda install -c anaconda jupyter

途中で「Proceed?([y],n)?」と出るので「y」を入力。完了後、

jupyter notebook

で起動できます。

 

◆まとめ

実際に私が試したCUDAとcuDNNの組み合わせですが

・CUDA10.0 × cuDNN v7.4.2 for CUDA 10.0

・CUDA9.2 × cuDNN v7.4.1 for CUDA 9.2

・CUDA9.0 × cuDNN v7.4.1 for CUDA 9.0

・CUDA9.0 × cuDNN v7.0.5 for CUDA 9.0

これらです。全部ダメでした。色々試行していたのでクリティカルな原因かは不明ですが全部pipでtensorflow-gpuを入れていました。

代わりにcondaを使ってみると上手く行ったわけですが、

はて。これでいいのかどうか…?

また続報あれば記事にします。

 

参考にさせていただいたサイト。先人に感謝

tkstock.site

cookie-box.hatenablog.com

github.com

CUDA9.2をインストールしたらトラブりました

◆目的

TensorFlowを勉強するためにCUDA9.0をアンインストールし

CUDA9.2をインストールしていました。※手順はコチラの通り

 

CUDA9.2をインストールし、Windows10を再起動した途端

Nvidiaのドライバがエラーを起こしたためにディスプレイがぐちゃぐちゃに。

これを解決しました。

 

◆結論

Nvidiaのドライバを更新したら解決。

しょうもなくてよかったです。

 

◆手順

【問題発生中の状況】

・デスクトップを右クリックしても

NVIDIAコントロールパネル」(下図赤枠)のボタンがでない。

f:id:mozukuino:20190114020038p:plain

・「ディスプレイ設定」で他のディスプレイが検出されない。

・解像度があからさまにぐちゃぐちゃ。ディスプレイドライバが仕事してない。

・コントロールパネルの表示が滅茶苦茶ゆっくり。

【原因調査】

コントロール パネル\すべてのコントロール パネル項目\トラブルシューティング

を開き、「バイスを構成する」を選択。

トラブルシューティングを実行しました。

f:id:mozukuino:20190114020654j:plain

NVIDIA GeForce GTX 1080にエラーが発生しているそうです。

f:id:mozukuino:20190114021344j:plain

ちなみにクリックしても何もしれくれませんでした。

f:id:mozukuino:20190114021355j:plain

 

【解決手順】

「デバイスマネージャー」を開きます。

f:id:mozukuino:20190114021526j:plain

問題を起こしている「NVIDIA GeForce GTX 1080」を選択し

ドライバーの更新をやってみました。

f:id:mozukuino:20190114021907j:plain

これで目立った事象は全部解決しました。

スクリーンショットのツールの挙動がおかしくなってしまいましたが

再起動したら治りました。ドライバを更新したらOSを再起動しましょう。

 

以上です。

【未解決】MNISTデータをインポートして形を見たいだけ

◆目的

TensorFlow勉強の続き。

「TensorFlow+KerasとMNISTデータを使って

 順伝搬型ニューラルネットワークを実装する」に着手しました。

書籍の内容に沿って学習しているので、記載しているのは躓いた部分のみになります。

 

MNISTデータをインポートして形を見よう!と、書籍に従ってコード書き

JupyterでRunしてみると…

Kernel Restarting

The kernel appears to have died. It will restart automatically.

(訳:カーネルが死んだっぽい。自動で再起動します)

というエラーが出ました。結果も出力されません。

f:id:mozukuino:20190107220629p:plain

ターミナルの方には確かに再起動したようなログが流れています。

 それ以外に見えるログはこれだけ。

f:id:mozukuino:20190108013538p:plain

◆対処法

【Anaconda更新】

起動しっぱなしだったので気づいていませんでした。

最新版があるみたいなので更新しました。

f:id:mozukuino:20190107224924p:plain

この画面でしばらく固まりました。うっかりDismissしないように注意

f:id:mozukuino:20190107225040p:plain

アップデート完了。

f:id:mozukuino:20190107224946p:plain

 

ちなみにまだエラーは解消しません。

 

【CUDA9.0→9.2?】

またCUDAの入れ直しなのでしょうか・・・

github.com

 

 書籍に合わせて、Jupyterを使っていきたいところではあります。

 

調査中保留

 

・そもそも一行目のfrom tensorflow.python~import mnistの時点でカーネル死んでる

・メモリの食い過ぎは絶対ない。というか1%も食ってない。何も起こってない。

・PC再起動もだめ

つらい

 

・tensorflowが絡むコードなら何でもkernelエラー起こすことがわかりました

・tensorflowが絡まなければ実行可能です。helloworldはできるんです。

 

2019/01/09

・CuDNNのバージョンをcuDNN v7.0.5 (Dec 5, 2017), for CUDA 9.0

 に変えてみました。TensorFlow公式の記載が"v7"だったのでです。

 まだダメです。

 

2019/01/14

・CUDAを「9.0」から「9.2」に変更(トラブった件

・CuDNNを「cuDNN v7.0.5 (Dec 5, 2017), for CUDA 9.0」から

  「cuDNN v7.4.1 (Nov 8, 2018), for CUDA 9.2」に変更

 

状況が変わりました。

f:id:mozukuino:20190114023155p:plain

まだまだ長いのですが。次はこれを解決したいです。

 内容はこれですね…。

github.com

 

◆類似事例

メモリ不足でも同じエラーがでるみたいです。

casualdevelopers.com

 

多分これもメモリ周りだと思います。

扱う画像サイズが大きすぎると同じエラーが出るみたいです。

pycarnival.com

CUDAのバージョン入れ替えに成功した話

◆目的

TensorFlow-GPUを試そうとした環境準備中、うっかりCUDA10.0を入れてしまった。

CUDA10.0を使用する場合はTensorFlowをローカルで再ビルドする必要アリ。

というわけで

CUDA10.0アンインストール&CUDA9.0をインストールし直す」ことにした。

 

適当にやると深刻な事態になるらしく色々と下調べをしてから実施。

結果:成功。ヤッター。

 

◆環境

※あまりに失敗報告ブログが散見されるので、環境や条件が異なると

 手順通り実施しても失敗するのかも知れません。

 別の手順もあるみたいです。最下部に参考リンク貼りました。

※2019年1月4日時点の記録です。

 

・OS:Windows10 Professional 64bit

GPUGeForce GTX 1080

・「CUDA Toolkit 10.0」及び「cuDNN v7.4.2 for CUDA 10.0」導入済み。

・他のNvidiaのドライバ類は全て実施時点の最新版に更新済み(おまじないとして)

 

◆手順

【はじめに結論】

 結論から言うと、このサイトの手順をバーションを読み替えてまるっとやりました。

dev.infohub.cc

上のブログが「旧→新」の手順紹介だったということで「新→旧」でも成功したぞ!!

ということをお伝えするためにこの記事を書きました。

 

簡単に作業中のログを載せていきます。何かの参考になれば幸いです。

 

【CUDA10.0アンインストール】

参考記事より色々残りました。

f:id:mozukuino:20190105005657p:plain

【CuDNN削除】

フォルダごと削除します。

f:id:mozukuino:20190105010021p:plain

【CUDA9.0ダウンロード】

CUDA Toolkit 9.0 Downloads | NVIDIA Developer

から「Base Insttaller」と「Patch1-4」の合計5ファイルをダウンロードします。

f:id:mozukuino:20190105005715p:plain

 

【CuDNN9.0ダウンロード】


cuDNN Archive | NVIDIA Developer

CUDA9.0用のCuDNNをダウンロードします。

f:id:mozukuino:20190105005727p:plain

【CUDAインストール】

ダウンロードファイルはこんな感じに揃っていればOK。

f:id:mozukuino:20190105010621p:plain

「Base Insttaller」をインストールしてから「Patch1-4」をインストールします。

CUDAは全部ダブルクリックでOK。

ただし「Patch1」だけは挙動が異なり、すぐにウィンドウが閉じてしまいます。

それで正常だそうです。Patch1以外は下のようなウィンドウが出ます。

私はオプションは特にいじらずで上手くいきました。詳細は分かりません…。

f:id:mozukuino:20190105010927p:plain

 

【CuDNN展開】

適当なフォルダに解凍して、

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0

に上書きコピーです。

f:id:mozukuino:20190105011709p:plain

手順は以上です。

Pathを通す場合は追加で実施します。

 

◆別の手順・失敗報告など

ご参考用リンクです。先人に感謝。

qiita.com

qiita.com

qiita.com

teratail.com

github.com

SurfacePro6購入したった

タイトル通りですが、

SurfacePro6を購入しました。i5の128GBです。

www.microsoft.com

ヨドバシに何度か足を運んで、ちょっとだけ勉強してもらって

マイクロソフトのキャッシュバックを適用したりゴニョゴニョして

通常購入するより2万円くらい安く買えました。

わぁい。

 

用途的に全然お絵かきなんてできなくても良かったのですが

amazonで互換◎なペンが売られててUSB充電もできるしイイヨーと書いてて。

趣味的にも有っても腐らないと思ったのでこのスタイラスペンも購入。

(これがあるなら本家のスタイラスペンを買う魅力って何だろ?)

 

実はASUS信者で、ASUSのUX433FNを購入する気満々で行った先で

熱心なSurface説明店員さんとエンカウントしたという理由で購入しました。

 

あまりに店員さんが波長を合わせて気持ちよく喋らせてくれたので・・・

たまにはこういう買い方もいいかなと。

 

使ってみた感じ、顔認証は全く申し分なく素早い。

サッと使いたい時が多いので立ち上がりが早いのはかなりポイント高め。

レスポンスも早いし仮想キーボードもさっさと出てくるし

物理キーボードのタッチ感もたわみも自分は全然問題なかったです。

気になるひとは(傾斜はなくなるけど)ペタッと机に付けちゃえばいいですね。

 

インタフェース周りはなんとも言えないです。

レビューでさんざん書かれてますが独自の電源口つくるならType-Cで良かったのでは感は凄まじいですわ。

私はType-Cのポートがあっても周辺機器が全然ついてきてないので許容範囲ですけど、…ちょっとした頑固さを感じますね。

 

インタフェースはそれとして、総合すると、買いで後悔しない出来です。

ただここまで丈夫で賢い機を出すなら、

あと1万上乗せてもいいからMX150なり1050Max-Qなり

GPU乗せちゃった型も出せばいいじゃんと

ASUSのUX480,UX433なんか見てると思っちゃいます。

 

長く使いたいとか、めっちゃ持ち運ぶとか、

思い立った瞬間にお絵かきできないと気が済まないんじゃい!

って人はSurFacePro6かラップトップのSurFaceが手堅いなーって感じ。

ゲーマーやクリエイターはGPUが載ってない点に気をつけて。

 

ちょっと遊びとか面白みがあっても良いんじゃねーのって人はASUSとか

その辺のちょっと個性だしてきてるPC買えばいいのかな。

 

Surfaceの筆圧検知も4096段階つう数字は確かに優秀なんだけど

お絵かきがメイン用途ならwacomのペンタブ買うっしょ。

 

GPU性能が欲しい作業は全然やってみてないので不明です。

また使ってみててわかったことがあったら書きますー

 

記事に書いたASUSのおニューなノートはこちら(回し者ではないです)

www.asus.com

www.asus.com