2017年5月31日

【Excel】シートの値をテキストファイルに出力するマクロ


シートの値をテキストファイルに出力するマクロです。

たとえば、このようなシートのセルB2~B7までの値をテキストファイルに出力するとします。



[出力]ボタンのClickイベントハンドラに次のように記述します。
Sub button1_Click()

    Dim i As Integer
    Dim filePath As String
    
    filePath = "C:\work\Excel\output.txt"

    'ファイルのオープン
    Open filePath For Output As #1
    
    For i = 2 To 7
        '書き込み
        Print #1, Cells(i, 2).Value
    Next i
    
    'ファイルを閉じる
    Close #1

End Sub

少し解説すると、まず、Openステートメントでファイルを開きます。

構文
Open ファイルパス For Output As #ファイル番号


次に、Printステートメントで値をファイルに出力します。

構文
Print #ファイル番号, ファイルに書き込む文字列


そして、最後にCloseステートメントでファイルを閉じます。


実行結果




2017年5月30日

【Excel】挿入した画像を拡大するマクロ


前回の、「画像を挿入するマクロ」から少し改造して、挿入した画像を拡大してみます。

Sub button1_Click()

    Range("C7").Select
    
    ActiveSheet.Pictures.Insert "C:\work\Excel\neko01.jpg"
    
    Dim cnt As Integer
    cnt = ActiveSheet.Shapes.Count
    
    '挿入した画像選択して名前を付ける
    ActiveSheet.Shapes(cnt).Select
    Selection.ShapeRange.Name = "image1"
    
    '画像の拡大
    With ActiveSheet.Shapes("image1")
        .LockAspectRatio = True     '縦横比を固定
        .Width = 300                '幅を指定(ポイント)
    End With

End Sub
まず、挿入した画像を選択して名前を付けます。
そして、LockAspectRatioをTrueにして縦横比を固定にした状態で、幅を指定しています。
ちなみに、幅の単位はポイントです。


実行結果


2017年5月29日

【Excel】画像を挿入するマクロ


シートに画像を挿入するマクロです。

Pictures.Insert [ファイル名]

まず、シートにボタンを1個配置します。
ボタンはメニューの[挿入]から図形の「角丸四角形」を貼り付けています。



そして、マクロの登録で「button1_Click()」というイベントハンドラを作り、下記のように記述します。
Sub button1_Click()

    Range("C7").Select
    
    ActiveSheet.Pictures.Insert "C:\work\Excel\neko01.jpg"
    
End Sub

ボタンを押すとこのようにアクティブセルの左上隅に画像の左上隅が一致するように画像が挿入されます。


2017年5月28日

【Linux】viの使い方はとりあえずこれだけ知っていればなんとかなる




先日、久々にviを使ったのですが、だいぶ操作方法を忘れてしまっていました。
そこで、とりあえずこれだけ知っていればなんとかなるという基本中の基本操作を抜き出してみました。

操作 キー
カーソルの移動 下:j 上:k 左:h 右:l
カーソルの位置に文字を挿入 i
1文字削除 x
1行削除 dd
保存 :w
終了 :q
強制終了 :q!

※ここで取り上げた操作は、ちょこっと編集する場合を想定していますので、もっと詳しく知りたい方は下記のサイトあたりを見てください。

<参考サイト>
viの使い方/基本操作 - 空間情報学講座 - 京都大学
viエディタの基本操作 - Qiita


<関連記事>
【Linux】Linux Mint のバージョンを確認する
【Linux】日本語入力がよく分からない。
【Linux】Linux Mint のデスクトップにゴミ箱を表示させる方法
Windows10マシンにデュアルブートでインストールしたLinux Mintを削除する方法
Windows10マシンにLinux Mintをインストールしてデュアルブート化してみた。
【Linux】Linux Mint にPowerShellをインストールしてみた。


2017年5月27日

【Linux】Linux MintでGRUBのメニューの順番を変える




以前、Linux MintとWindows10をデュアルブートにしたのですが、GRUBのメニューでWindows10が一番下に来てしまっているんですよね。
まあ別にそれでも全然構わないんですが、できればWindows10をトップに持ってきたいなと思いまして。
それで、調べたところ下記のようにすれば順番を変更できることが分かりました。


/etc/grub.d

まず、/etc/grub.dのファイル構成を見てみます。
/etc/grub.d $ ls -l
合計 92
-rwxr-xr-x 1 root root  9791  4月 16  2016 00_header
-rwxr-xr-x 1 root root  6258  3月 16  2016 05_debian_theme
-rwxr-xr-x 1 root root  1180 10月 25  2014 06_mint_theme
-rwxr-xr-x 1 root root 12267  5月 27  2017 10_linux
-rwxr-xr-x 1 root root 10634 10月  1  2012 10_lupin
-rwxr-xr-x 1 root root 11082  4月 16  2016 20_linux_xen
-rwxr-xr-x 1 root root  1992  1月 28  2016 20_memtest86+
-rwxr-xr-x 1 root root 11692  4月 16  2016 30_os-prober
-rwxr-xr-x 1 root root  1418  4月 16  2016 30_uefi-firmware
-rwxr-xr-x 1 root root   214  4月 16  2016 40_custom
-rwxr-xr-x 1 root root   216  4月 16  2016 41_custom
-rw-r--r-- 1 root root   483  4月 16  2016 README
GRUBのメニューの順番は、ここにあるファイルの先頭の数字で決まってくるようです。
したがって、この数字を変えてあげれば順番を変えられるということになります。

そして、「30_os-prober」というのがWindows10らしいです。


ファイル名の変更

ここでは、「10_linux」(Linux Mint)の上に来るようにファイル名を「09_os-prober」にします。
$ sudo mv /etc/grub.d/30_os-prober /etc/grub.d/09_os-prober

一応、確認してみます。
/etc/grub.d $ ls -l
合計 92
-rwxr-xr-x 1 root root  9791  4月 16  2016 00_header
-rwxr-xr-x 1 root root  6258  3月 16  2016 05_debian_theme
-rwxr-xr-x 1 root root  1180 10月 25  2014 06_mint_theme
-rwxr-xr-x 1 root root 11692  4月 16  2016 09_os-prober
-rwxr-xr-x 1 root root 12267  5月 27  2017 10_linux
-rwxr-xr-x 1 root root 10634 10月  1  2012 10_lupin
-rwxr-xr-x 1 root root 11082  4月 16  2016 20_linux_xen
-rwxr-xr-x 1 root root  1992  1月 28  2016 20_memtest86+
-rwxr-xr-x 1 root root  1418  4月 16  2016 30_uefi-firmware
-rwxr-xr-x 1 root root   214  4月 16  2016 40_custom
-rwxr-xr-x 1 root root   216  4月 16  2016 41_custom
-rw-r--r-- 1 root root   483  4月 16  2016 README
「09_os-prober」が「10_linux」の上に来ています。
それにしても、os-proberて何?


更新

ファイル名が変更できたら、最後にGRUBの設定を更新します。
$ sudo update-grub


<関連記事>
【Linux】Linux MintでGRUBのタイムアウト時間を変更する
Windows10マシンにデュアルブートでインストールしたLinux Mintを削除する方法
Windows10マシンにLinux Mintをインストールしてデュアルブート化してみた。
【Linux】Linux Mint にSQL Serverをインストールしてみた
【Linux】Linux Mint にPowerShellをインストールしてみた。
【Linux】Linux Mint にSophos Anti-Virus for Linux(Free Edition)を入れてみた


2017年5月26日

【Linux】Linux MintでGRUBのタイムアウト時間を変更する




Linux MintでGRUBのタイムアウト時間を変更する方法です。

/etc/default/grubの編集

まず、/etc/default/grubを開きます。
$ sudo vi /etc/default/grub
この例では、viを使ってますが、その他のテキストエディターで開いても構いません。

GRUB_TIMEOUTの変更

次に、GRUB_TIMEOUTにタイムアウトの秒数を設定します。
この例では20秒に設定しています。
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT='Windows 10 (loader) (on /dev/sda1)'
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=20
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

更新

設定をしたら、最後にupdate-grubで更新します。
$ sudo update-grub

<関連記事>
【Linux】Linux MintでGRUBのメニューの順番を変える
Windows10マシンにデュアルブートでインストールしたLinux Mintを削除する方法
Windows10マシンにLinux Mintをインストールしてデュアルブート化してみた。
【Linux】Linux Mint にSQL Serverをインストールしてみた
【Linux】Linux Mint にPowerShellをインストールしてみた。
【Linux】Linux Mint にSophos Anti-Virus for Linux(Free Edition)を入れてみた


2017年5月25日

【PowerShell】インストールされているプログラムの一覧を取得する


インストールされているプログラムの一覧を取得するには、WMIのWin32_Productを使用します。


一覧を取得

PS C:\work> Get-WmiObject -Class Win32_Product -ComputerName .


IdentifyingNumber : {B5473F47-EEA5-44AE-8213-78E5908CDCE6}
Name              : Microsoft Visual Studio 2017 Tools for Unity
Vendor            : Microsoft Corporation
Version           : 3.1.0.0
Caption           : Microsoft Visual Studio 2017 Tools for Unity

IdentifyingNumber : {BC25B808-A11C-4C9F-9C0A-6682E47AAB83}
Name              : Gtk# for .Net 2.12.26
Vendor            : Xamarin, Inc.
Version           : 2.12.26
Caption           : Gtk# for .Net 2.12.26

IdentifyingNumber : {F99F24BF-0B90-463E-9658-3FD2EFC3C992}
Name              : Microsoft Identity Extensions
Vendor            : Microsoft Corporation
Version           : 2.0.1459.0
Caption           : Microsoft Identity Extensions

-以下略-


全てのプロパティを表示

Propertyパラメーターに(*)を指定することですべてのプロパティを表示できます。
PS C:\work> Get-WmiObject -Class Win32_Product -ComputerName . | Where-Object -FilterScript {$_.Name -eq "SQL Server 2016 Management Studio"} | Format-List -Property *


PSComputerName    : USERPC
Name              : SQL Server 2016 Management Studio
Version           : 13.0.15700.28
InstallState      : 5
__GENUS           : 2
__CLASS           : Win32_Product
__SUPERCLASS      : CIM_Product
__DYNASTY         : CIM_Product
__RELPATH         : Win32_Product.IdentifyingNumber="{0D000000-F000-4000-8006-70000F000009}",Name="SQL Server 2016 Management Studio",Version="13.0.15700.28"
__PROPERTY_COUNT  : 27
__DERIVATION      : {CIM_Product}
__SERVER          : USERPC
__NAMESPACE       : root\cimv2

-以下略-


横一列に表示

Select-Objectを使ってプロパティを横一列に表示します。
PS C:\work> Get-WmiObject -Class Win32_Product -ComputerName . | Select-Object Name, Vendor, Version, Caption

Name                                                                            Vendor                Version        Caption
----                                                                            ------                -------        -------
Microsoft Visual Studio 2017 Tools for Unity                                    Microsoft Corporation 3.1.0.0        Microsoft Visual Studio 2017 Tools for Unity
Microsoft Identity Extensions                                                   Microsoft Corporation 2.0.1459.0     Microsoft Identity Extensions
Microsoft Application Error Reporting                                           Microsoft Corporation 12.0.6015.5000 Microsoft Application Error Reporting
Microsoft DCF MUI (Japanese) 2013                                               Microsoft Corporation 15.0.4569.1506 Microsoft DCF MUI (Japanese) 2013
Microsoft OneNote MUI (Japanese) 2013                                           Microsoft Corporation 15.0.4569.1506 Microsoft OneNote MUI (Japanese) 2013
Microsoft Office OSM MUI (Japanese) 2013                                        Microsoft Corporation 15.0.4569.1506 Microsoft Office OSM MUI (Japanese) 2013
Microsoft Office OSM UX MUI (Japanese) 2013                                     Microsoft Corporation 15.0.4569.1506 Microsoft Office OSM UX MUI (Japanese) 2013
Microsoft InfoPath MUI (Japanese) 2013                                          Microsoft Corporation 15.0.4569.1506 Microsoft InfoPath MUI (Japanese) 2013
Microsoft Access MUI (Japanese) 2013                                            Microsoft Corporation 15.0.4569.1506 Microsoft Access MUI (Japanese) 2013
Microsoft Excel MUI (Japanese) 2013                                             Microsoft Corporation 15.0.4569.1506 Microsoft Excel MUI (Japanese) 2013
Microsoft PowerPoint MUI (Japanese) 2013                                        Microsoft Corporation 15.0.4569.1506 Microsoft PowerPoint MUI (Japanese) 2013
Microsoft Publisher MUI (Japanese) 2013                                         Microsoft Corporation 15.0.4569.1506 Microsoft Publisher MUI (Japanese) 2013

-以下略-


CSVファイルに出力

PS C:\work> Get-WmiObject -Class Win32_Product -ComputerName . | Select-Object Name, Vendor, Version, Caption | Export-Csv programlist.csv -Encoding Default

2017年5月24日

【PowerShell】ファイルやフォルダをNTFS暗号化する


ファイルやフォルダをNTFS暗号化するには、いくつか方法があるのですが、ここでは.NET Frameworkを使った方法を紹介します。

暗号化

Encryptメソッドで暗号化します。
$file = "c:\work\test.txt"
[System.IO.File]::Encrypt($file)

複合化

Decryptメソッドで複合化します。
$file = "c:\work\test.txt"
[System.IO.File]::Decrypt($file)

2017年5月23日

【PowerShell】Windowsのバージョンを取得する


通常、Windowsのバージョンを取得するには、systeminfo.exeを実行すれば取得できます。

systeminfo.exe

PS C:\work> systeminfo.exe

ホスト名:               USERPC
OS 名:                  Microsoft Windows 10 Pro
OS バージョン:          10.0.14393 N/A ビルド 14393
OS 製造元:              Microsoft Corporation
OS 構成:                スタンドアロン ワークステーション
OS ビルドの種類:        Multiprocessor Free
登録されている所有者:   USER01
登録されている組織:     PC
プロダクト ID:          00000-00000-00000-00000
最初のインストール日付: 2016/09/26, 21:13:08
システム起動時間:       2017/05/20, 10:49:18
システム製造元:         xxxxxx
システム モデル:        xxxxxx
システムの種類:         x64-based PC
プロセッサ:             1 プロセッサインストール済みです。
                        [01]: Intel64 Family 6 Model 42 Stepping 7 GenuineIntel ~3401 Mhz
BIOS バージョン:        American Megatrends Inc. 4.6.4, 2011/12/23
-以下略-
ただ、これだとその他の情報もたくさん出てきて、あまりスマートとは言えません。


そこで次の2つの方法で取得してみました。

.NET

.NETクラスを利用した方法です。
PS C:\work> [System.Environment]::OSVersion

Platform ServicePack Version      VersionString
-------- ----------- -------      -------------
 Win32NT             10.0.14393.0 Microsoft Windows NT 10.0.14393.0
ほんとにバージョンだけの表示です。
シンプルですが、数字だけだとWindows10なのかどうなのかがいまいちよく分かりません。

WMI

Windows Management Instrumentation (WMI)を利用した方法です。
PS C:\work> Get-WmiObject Win32_OperatingSystem | Format-List Caption, Version


Caption : Microsoft Windows 10 Pro
Version : 10.0.14393
Get-WmiObjectでWMIオブジェクトを取得して、特定のプロパティ(Caption, Version)だけ表示しています。
これならWindows10ということも一目瞭然で、なおかつバージョンの数字も分かります。
この方法が一番すっきりしてて分かりやすい感じです。


2017年5月22日

【PowerShell】ファイルに読み取り専用属性を付ける


ファイルに読み取り専用属性を付けるには、Set-ItemPropertyを使います。

test.logというファイルに読み取り専用属性を付けます。
PS C:\work> Set-ItemProperty test.log attributes ReadOnly

Get-ItemPropertyで確認してみます。
PS C:\work> Get-ItemProperty test.log


    ディレクトリ: C:\work


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
--r---       2016/11/23     17:39           1709 test.log
Modeに「r」属性が付いています。
読み取り専用になりました。


2017年5月21日

【Linux】Linux Mint のバージョンを確認する





Linux Mint のバージョンを確認する方法です。

$ cat /etc/lsb-release
DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=18
DISTRIB_CODENAME=sarah
DISTRIB_DESCRIPTION="Linux Mint 18 Sarah"

または

$ cat /etc/issue
Linux Mint 18 Sarah \n \l


<関連記事>
Windows10マシンにデュアルブートでインストールしたLinux Mintを削除する方法
Windows10マシンにLinux Mintをインストールしてデュアルブート化してみた。
【Linux】Linux Mint にPowerShellをインストールしてみた。
Linux Mint にSophos Anti-Virus for Linux(Free Edition)を入れてみた
【Linux】日本語入力がよく分からない。
【Linux】Linux Mint のデスクトップにゴミ箱を表示させる方法


2017年5月20日

【PowerShell】Accessデータベースからデータを取得する



Accessデータベースからデータを取得するスクリプトです。

#引数の値を変数に格納(ID)
$id = $args[0]

#DBファイル名
$scriptPath = $MyInvocation.MyCommand.Path
$currentPath = Split-Path -Parent $scriptPath
$db = Join-Path $currentPath "test.accdb"

#定数
$adOpenStatic = 3  
$adLockOptimistic = 3

#オブジェクト作成
$cnn = New-Object -ComObject ADODB.Connection
$rst = New-Object -ComObject ADODB.Recordset

#接続
$cnn.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$db")

#SQL
$cmd = "SELECT ID, ユーザーID, 名前 FROM T_Users WHERE ID = " + $id

#レコードセットOpen
$rst.Open($cmd, $cnn, $adOpenStatic, $adLockOptimistic)

#先頭レコードに移動
$rst.MoveFirst()  

#レコードの読取  
while($rst.EOF -eq $False) 
{
    Write-Host "ID:" $rst.Fields.Item("ID").Value 
    Write-Host "ユーザーID:" $rst.Fields.Item("ユーザーID").Value 
    Write-Host "名前:" $rst.Fields.Item("名前").Value 
    $rst.MoveNext()
} 

#終了
$rst.Close()
$cnn.Close()  
このスクリプトファイルと同じ場所にある「test.accdb」から「T_Users」というテーブルのデータを取得しています。
データの取得方法は、VBAの場合と同じです。
Connectionで接続し、Recordsetでレコードセットを取得しています。

あと、実行する際には、32ビットで実行するか、64ビットで実行するかに気を付けてください。
インストールされているAccessが32ビット用の場合は、32ビットで実行してください。

実行結果
PS C:\work\access> .\GetAccessData.ps1 2
ID: 2
ユーザーID: 100202
名前: 山田太郎


<参考サイト>
https://gallery.technet.microsoft.com/office/a4a0ade2-e856-48ff-9e91-31b4b6356382


2017年5月19日

【PowerShell】SMBv1 を無効化する


最近、世間を騒がせているランサムウェア「WannaCry」。感染するとファイルを暗号化し身代金を要求するというのですが、およそ150か国で30万件以上の被害が出ているらしいです。

米高官 サイバー攻撃の被害は約150か国で30万件以上 | NHKニュース


対策としては、最新のセキュリティーパッチを当てていれば大丈夫らしいんですが、こういうマルウェアというのは常に進化しているんで念のためSMBv1を無効化しておくのがいいようです。

参考:ランサムウェア WannaCrypt 攻撃に関するお客様ガイダンス|Microsoft TechNet



SMBv1の無効化は、通常、[コントロールパネル]の[プログラム]から[Windows の機能の有効化または無効化]で、 [SMB1.0/CIFS ファイル共有のサポート]のチェックを外して、PCを再起動すれば出来るのですが、調べたらPowerShellでも出来ることが分かりました。しかも、こっちのほうが簡単に無効化できそうです。


現在の設定状況を確認

Get-WindowsOptionalFeatureでWindowsの機能の設定状況を確認できます。
PS C:\work> Get-WindowsOptionalFeature -Online -FeatureName "SMB1Protocol"


FeatureName      : SMB1Protocol
DisplayName      : SMB 1.0/CIFS ファイル共有のサポート
Description      : SMB 1.0/CIFS ファイル共有プロトコルと、コンピューター ブラウザー プロトコルのサポート。
RestartRequired  : Possible
State            : Enabled
CustomProperties :
                   ServerComponent\Description : SMB 1.0/CIFS ファイル共有プロトコルと、コンピューター ブラウザー プロトコルのサポート。
                   ServerComponent\DisplayName : SMB 1.0/CIFS ファイル共有のサポート
                   ServerComponent\Id : 487
                   ServerComponent\Type : Feature
                   ServerComponent\UniqueName : FS-SMB1
                   ServerComponent\Deploys\Update\Name : SMB1Protocol
StateがEnabledになっているので「有効」になっています。


SMBv1の無効化

Disable-WindowsOptionalFeatureでWindows機能の無効化が出来ます。
PS C:\work> Disable-WindowsOptionalFeature -Online -FeatureName "SMB1Protocol"
この操作を完了するために、今すぐコンピューターを再起動しますか?
[Y] Yes  [N] No  [?] ヘルプ (既定値は "Y"):
設定を完了するにはPCの再起動が必要ですので、今すぐまたは後で、必ず再起動を行ってください。

2017年5月18日

2017年5月17日

2017年5月16日

【PowerShell】コンソールホストに関する情報を取得する


Get-Hostにより、Windows PowerShellコンソールに関する情報を取得できます。
ホスト名、実行されているPowerShellのバージョン、現在のカルチャなどを取得できます。

PS C:\work> Get-Host


Name             : ConsoleHost
Version          : 5.1.14393.1198
InstanceId       : fe3f237c-c6cf-402c-91a5-a0366b10a851
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : ja-JP
CurrentUICulture : ja-JP
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
DebuggerEnabled  : True
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

2017年5月15日

【PowerShell】コマンドの実行時間を計測する



Measure-Commandでコマンドの実行時間を計測することができます。

構文
Measure-Command {スクリプトブロック}

PS C:\work> Measure-Command {Stop-Service -Name 'MSSQL$MSSQLSERVER2016'}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 1
Milliseconds      : 7
Ticks             : 10079105
TotalDays         : 1.1665630787037E-05
TotalHours        : 0.000279975138888889
TotalMinutes      : 0.0167985083333333
TotalSeconds      : 1.0079105
TotalMilliseconds : 1007.9105
この例ではサービス停止にかかる時間を計測しています。


<関連記事>
【PowerShell】指定した期間動作を一時停止する
【PowerShell】コマンド履歴からコマンドを実行する
【PowerShell】コマンド履歴に追加する
【PowerShell】コマンド履歴をクリアする
【PowerShell】入力されたコマンドの履歴を取得する

2017年5月14日

【PowerShell】パスの指定した部分を取り出す


Split-Pathを使うことによって、パスから親フォルダやファイル名を取り出すことが出来ます。

構文
Split-Path [-Path] <パス> [-Parent] 
Split-Path [-Path] <パス> [-Leaf]
Split-Path [-Path] <パス> [-Qualifier]

親フォルダ

PS C:\> Split-Path "C:\work\image1\eeee.jpg" -Parent
C:\work\image1

ファイル名

PS C:\> Split-Path "C:\work\image1\eeee.jpg" -Leaf
eeee.jpg

ドライブ名

PS C:\> Split-Path "C:\work\image1\eeee.jpg" -Qualifier
C:


2017年5月13日

【PowerShell】パスを結合する


Join-Pathを使うことによって、パスを結合することが出来ます。

構文
Join-Path [-Path] <親パス> [-ChildPath] <子パス>

PS C:\work> Join-Path c:\work test.log
c:\work\test.log
結合する親パスと子パスの間の\マークは必要に応じて自動で付けてくれます。



2017年5月12日

【PowerShell】ワイルドカードを解決しパスの内容を表示する


Resolve-Pathを使うことによってパスの解決が出来ます。

構文
Resolve-Path [-Path] <パス>

ホームパスを表示する
PS C:\work> Resolve-Path ~

Path
----
C:\Users\hosopro


ワイルドカードに一致するパスを表示する
PS C:\work> Resolve-Path "image*"

Path
----
C:\work\image1
C:\work\image2
C:\work\image3


2017年5月11日

【PowerShell】パスを変換する


Convert-Pathは、PowerShellパスをシステムパスに変換します。

構文
Convert-Path [-Path] <パス>


たとえば、C:\workをPSドライブのzドライブとします。
PS C:\work> New-PSDrive -Name z -PSProvider FileSystem -Root C:\work

Name           Used (GB)     Free (GB) Provider      Root                                                  CurrentLocation
----           ---------     --------- --------      ----                                                  ---------------
z                   0.00        240.37 FileSystem    C:\work


PS C:\work> cd z:
PS z:\>

ここでカレントディレクトリ「z:\image1」で、Convert-Pathを使い実際のパスを表示してみます。
PS z:\image1> Convert-Path .
C:\work\image1
実際のパス「C:\work\image1」が表示されました。


2017年5月10日

【PowerShell】アイテムをクリアする


Clear-Itemを使うことにより、変数やレジストリの値をクリアすることが出来ます。ただし、変数などのアイテムの内容をクリアしますが、アイテム自体は削除しません。

構文
Clear-Item [-Path] <パス>

変数$aの値のクリア。
PS C:\work> $a = "Hello!"
PS C:\work> $a
Hello!
PS C:\work> Clear-Item Variable:a
PS C:\work> $a
PS C:\work>
3行目で、変数$aに「Hello!」が格納されていることが確認できますが、6行目で値がクリアされていることが確認できます。


2017年5月9日

【PowerShell】ファイル名を変更する


ファイル名を変更するには、Rename-Itemを使います。

構文
Rename-Item [-Path] <ファイルパス> [-NewName] <新しいファイル名>

たとえば、aaaa.jpgというファイルがあったとします。
PS C:\work\image2> dir


    ディレクトリ: C:\work\image2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2016/10/15      0:20         425167 aaaa.jpg


このaaaa.jpgをbbbb.jpgにファイル名を変更するには次のようにします。
PS C:\work\image2> Rename-Item aaaa.jpg bbbb.jpg


再度dirで見てみると、ファイル名がbbbb.jpgに変更されているのが確認できます。
PS C:\work\image2> dir


    ディレクトリ: C:\work\image2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2016/10/15      0:20         425167 bbbb.jpg


2017年5月8日

Windows10で付箋を表示させる方法

この前、付箋を使いたいなと思って、Windowsのスタートボタンから付箋を探したんですが、見つからないんですよね。

あれ、おかしいな~と思ってネットで調べてみると、どうやらWindows10だとプログラムの一覧には出てこないみたいなんですよね。

しかも、「Windows Ink ワークスペース」とやらを起動しないと使えないらしいんです。

というわけで、今日はWindows10で付箋を表示させる方法です。




まず、タスクバーで右クリックしたら、「Windows Ink ワークスペースボタンを表示」にチェックを入れます。



次に、タスクバーに「Windows Ink ワークスペース」というボタンが表示されていますので、クリックします。



するとこのような「Windows Ink ワークスペース」というのがビロ~ンと表示されるので、そこにある「付箋」をクリックすればデスクトップ上に付箋が表示されます。



実際に貼り付けた付箋はこんな感じになります。
ちなみに色は6色だけで、文字のフォントやサイズは変えられません。
ほんとにシンプルな付箋です。


<関連記事>
【Windows10】ストアから購入したテーマの壁紙はどこに保存されるの?
【Windows10】コントロールパネルを表示する方法。
【Windows10】仮想デスクトップを移動するショートカット
【Windows10】起動時にWindows Time サービスを起動させる
Windows10の時刻自動設定がおかしい
【Windows】Windows10バージョン1809の新元号対応パッチも公開されたらしい

2017年5月7日

【PowerShell】オブジェクトをHTMLに変換する


コマンドレットの出力結果などをHTMLに変換するには、ConvertTo-Htmlを使います。

PS C:\work\image1> Get-ChildItem | Select-Object Name, LastWriteTime, Length | ConvertTo-Html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>HTML TABLE</title>
</head><body>
<table>
<colgroup><col/><col/><col/></colgroup>
<tr><th>Name</th><th>LastWriteTime</th><th>Length</th></tr>
<tr><td>aaaa.jpg</td><td>2016/10/15 0:20:20</td><td>425167</td></tr>
<tr><td>bbbb.jpg</td><td>2016/10/10 10:14:04</td><td>245901</td></tr>
<tr><td>cccc.jpg</td><td>2016/10/10 10:05:19</td><td>194315</td></tr>
<tr><td>dddd.jpg</td><td>2016/10/10 10:13:35</td><td>235320</td></tr>
<tr><td>eeee.jpg</td><td>2016/10/15 0:19:45</td><td>852563</td></tr>
<tr><td>ffff.jpg</td><td>2016/10/15 19:06:09</td><td>593126</td></tr>
<tr><td>gggg.jpg</td><td>2016/10/15 0:21:41</td><td>607218</td></tr>
</table>
</body></html>


2017年5月6日

【PowerShell】CLIXMLファイルから構造化データをインポートする


CLIXMLファイルから構造化データをインポートするには、Import-Clixmlを使います。

PS C:\work\image1> Import-Clixml C:\work\item.xml

Name     LastWriteTime       Length
----     -------------       ------
aaaa.jpg 2016/10/15 0:20:20  425167
bbbb.jpg 2016/10/10 10:14:04 245901
cccc.jpg 2016/10/10 10:05:19 194315
dddd.jpg 2016/10/10 10:13:35 235320
eeee.jpg 2016/10/15 0:19:45  852563
ffff.jpg 2016/10/15 19:06:09 593126
gggg.jpg 2016/10/15 0:21:41  607218


2017年5月5日

【PowerShell】構造化データをCLIXMLファイルにエクスポートする


構造化データをCLIXMLファイルにエクスポートするには、Export-Clixmlを使います。

PS C:\work\image1> Get-ChildItem | Select-Object Name, LastWriteTime, Length | Export-Clixml item.xml -Encoding Default

出力結果(item.xml)
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
  <Obj RefId="0">
    <TN RefId="0">
      <T>Selected.System.IO.FileInfo</T>
      <T>System.Management.Automation.PSCustomObject</T>
      <T>System.Object</T>
    </TN>
    <MS>
      <S N="Name">aaaa.jpg</S>
      <DT N="LastWriteTime">2016-10-15T00:20:20.9723728+09:00</DT>
      <I64 N="Length">425167</I64>
    </MS>
  </Obj>
  <Obj RefId="1">
    <TNRef RefId="0" />
    <MS>
      <S N="Name">bbbb.jpg</S>
      <DT N="LastWriteTime">2016-10-10T10:14:04.9771779+09:00</DT>
      <I64 N="Length">245901</I64>
    </MS>
  </Obj>
  <Obj RefId="2">
    <TNRef RefId="0" />
    <MS>
      <S N="Name">cccc.jpg</S>
      <DT N="LastWriteTime">2016-10-10T10:05:19.3677253+09:00</DT>
      <I64 N="Length">194315</I64>
    </MS>
  </Obj>
  <Obj RefId="3">
    <TNRef RefId="0" />
    <MS>
      <S N="Name">dddd.jpg</S>
      <DT N="LastWriteTime">2016-10-10T10:13:35.8531086+09:00</DT>
      <I64 N="Length">235320</I64>
    </MS>
  </Obj>
  <Obj RefId="4">
    <TNRef RefId="0" />
    <MS>
      <S N="Name">eeee.jpg</S>
      <DT N="LastWriteTime">2016-10-15T00:19:45.2356587+09:00</DT>
      <I64 N="Length">852563</I64>
    </MS>
  </Obj>
  <Obj RefId="5">
    <TNRef RefId="0" />
    <MS>
      <S N="Name">ffff.jpg</S>
      <DT N="LastWriteTime">2016-10-15T19:06:09.4974508+09:00</DT>
      <I64 N="Length">593126</I64>
    </MS>
  </Obj>
  <Obj RefId="6">
    <TNRef RefId="0" />
    <MS>
      <S N="Name">gggg.jpg</S>
      <DT N="LastWriteTime">2016-10-15T00:21:41.9347667+09:00</DT>
      <I64 N="Length">607218</I64>
    </MS>
  </Obj>
</Objs>


2017年5月4日

【PowerShell】オブジェクトをXMLに変換する


オブジェクトをXMLに変換するには、ConvertTo-Xmlを使います。

PS C:\work\image1> Get-ChildItem | Select-Object Name, LastWriteTime, Length | ConvertTo-Xml -As String
<?xml version="1.0" encoding="utf-8"?>
<Objects>
  <Object Type="System.Management.Automation.PSCustomObject">
    <Property Name="Name" Type="System.String">aaaa.jpg</Property>
    <Property Name="LastWriteTime" Type="System.DateTime">2016/10/15 0:20:20</Property>
    <Property Name="Length" Type="System.Int64">425167</Property>
  </Object>
  <Object Type="System.Management.Automation.PSCustomObject">
    <Property Name="Name" Type="System.String">bbbb.jpg</Property>
    <Property Name="LastWriteTime" Type="System.DateTime">2016/10/10 10:14:04</Property>
    <Property Name="Length" Type="System.Int64">245901</Property>
  </Object>
  <Object Type="System.Management.Automation.PSCustomObject">
    <Property Name="Name" Type="System.String">cccc.jpg</Property>
    <Property Name="LastWriteTime" Type="System.DateTime">2016/10/10 10:05:19</Property>
    <Property Name="Length" Type="System.Int64">194315</Property>
  </Object>
  <Object Type="System.Management.Automation.PSCustomObject">
    <Property Name="Name" Type="System.String">dddd.jpg</Property>
    <Property Name="LastWriteTime" Type="System.DateTime">2016/10/10 10:13:35</Property>
    <Property Name="Length" Type="System.Int64">235320</Property>
  </Object>
  <Object Type="System.Management.Automation.PSCustomObject">
    <Property Name="Name" Type="System.String">eeee.jpg</Property>
    <Property Name="LastWriteTime" Type="System.DateTime">2016/10/15 0:19:45</Property>
    <Property Name="Length" Type="System.Int64">852563</Property>
  </Object>
  <Object Type="System.Management.Automation.PSCustomObject">
    <Property Name="Name" Type="System.String">ffff.jpg</Property>
    <Property Name="LastWriteTime" Type="System.DateTime">2016/10/15 19:06:09</Property>
    <Property Name="Length" Type="System.Int64">593126</Property>
  </Object>
  <Object Type="System.Management.Automation.PSCustomObject">
    <Property Name="Name" Type="System.String">gggg.jpg</Property>
    <Property Name="LastWriteTime" Type="System.DateTime">2016/10/15 0:21:41</Property>
    <Property Name="Length" Type="System.Int64">607218</Property>
  </Object>
</Objects>


2017年5月3日

【PowerShell】CSVファイルからデータをインポートする


CSVファイルからデータをインポートするには、Import-Csvを使用します。

構文
Import-Csv [[-Path] <CSVファイルパス>]

データをCSVファイルに出力する』で出力したCSVファイルからインポートしてみます。
PS C:\work\image1> $a = Import-Csv item.csv -Encoding Default
PS C:\work\image1> $a

Name     LastWriteTime       Length
----     -------------       ------
aaaa.jpg 2016/10/15 0:20:20  425167
bbbb.jpg 2016/10/10 10:14:04 245901
cccc.jpg 2016/10/10 10:05:19 194315
dddd.jpg 2016/10/10 10:13:35 235320
eeee.jpg 2016/10/15 0:19:45  852563
ffff.jpg 2016/10/15 19:06:09 593126
gggg.jpg 2016/10/15 0:21:41  607218


2017年5月2日

【PowerShell】データをCSVファイルに出力する


コマンドレットの結果などをCSVファイルに出力するには、Export-Csvを使用します。

構文
Export-Csv [[-Path] <CSVファイルパス>]

PS C:\work\image1> Get-ChildItem | Select-Object Name, LastWriteTime, Length | Export-Csv item.csv -Encoding Default

出力結果(item.csv)
#TYPE Selected.System.IO.FileInfo
"Name","LastWriteTime","Length"
"aaaa.jpg","2016/10/15 0:20:20","425167"
"bbbb.jpg","2016/10/10 10:14:04","245901"
"cccc.jpg","2016/10/10 10:05:19","194315"
"dddd.jpg","2016/10/10 10:13:35","235320"
"eeee.jpg","2016/10/15 0:19:45","852563"
"ffff.jpg","2016/10/15 19:06:09","593126"
"gggg.jpg","2016/10/15 0:21:41","607218"


2017年5月1日

【PowerShell】CSVをオブジェクトに変換する


CSV文字列をオブジェクトに変換するには、ConvertFrom-Csvを使用します。


ConvertFrom-Csv @("1,山口孝之,営業部","2,星野兼,総務部", "3,酒井雅人,人事部", "4,米倉亮子,技術部") -Header "No.","名前","部署"

実行結果
No. 名前     部署
--- ----     ----
1   山口孝之 営業部
2   星野兼   総務部
3   酒井雅人 人事部
4   米倉亮子 技術部

「-Header」でヘッダー文字列を指定することが出来ます。省略した場合は、1行目をヘッダーとみなします。
区切り文字はデフォルトで「,」ですが、「-Delimiter」で指定することも出来ます。