しばたテックブログ

気分で書いている技術ブログです。

保護されているパーティションをPowerShellで削除する

小ネタおよび備忘録です。

手持ちのESXiをインストールしたUSBメモリをフォーマットし直そうとした際に、GUIからだと先頭のブートパーティションが削除できなかったのが発端です。

Diskpartで削除する

最初に参考情報としてDiskpartで削除する手順を紹介します。

nasunoblog.blogspot.com

Insider MVPの那須さんのブログに手順が詳しく記載されています。

こちらのケースではEFIシステムパーティションですが、保護されているパーティションを削除する場合はDiskpartコマンドを起動して該当のパーティションを選択したのち、

delete partition override

overrideを付けてdelete partitionしてやればOKです。

PowerShellで削除する

ここからが本題です。

PowerShellでこの様なパーティションを削除する場合はRemove-Partitionを使います。
先述のoverrideパラメーターの様な特殊なパラメーター指定は必要ありません。

実例

今回は下図のディスクを例に挙げます。

f:id:stknohg:20180803111030p:plain

図のディスク2がESXiをインストールしていたUSBメモリで、先頭4MBがブートパーティションでGUIからは削除することができません。
(他にもいくつかパーティションがあったのですが、この図ではすでに削除済みです)

この4MBのパーティションをPowerShellを使って削除します。

1. 削除対象パーティンションの確認

はじめに管理者としてPowerShellを起動します。
Get-Diskコマンドを実行すると、システムから見えるディスクの一覧を取得できます。

Get-Disk

Get-Partitionコマンドでディスクにあるパーティションを取得できます。

Get-Partition -DiskNumber [該当ディスク番号]

f:id:stknohg:20180803111047p:plain

この例だと、DiskNumber = 2PartitionNumber = 1が対象のパーティションとなります。

2. パーティンションの削除

Get-Partitionコマンドの結果はWMIのMSFT_Partition*1クラスのオブジェクトであり、このオブジェクトをRemove-Partitionコマンドに引き渡すことでパーティションの削除ができます。

以下の様にパイプラインでつなげてやればOKです。

Get-Partition -DiskNumber [該当ディスク番号] -PartitionNumber [該当パーティション番号] | Remove-Partition

f:id:stknohg:20180803111059p:plain

パイプラインを使わず直接DiskNumber、PartitionNumberを指定しても構いません。

Remove-Partition -DiskNumber [該当ディスク番号] -PartitionNumber [該当パーティション番号]

3. 結果の確認

これで保護されているパーティションを削除できます。

f:id:stknohg:20180803111116p:plain

GUIから見ても確かに消えていることが確認できました。

*1:PowerShell上は Microsoft.Management.Infrastructure.CimInstance#ROOT/Microsoft/Windows/Storage/MSFT_Partition 型で表現される

無を取得

【2018.12.20追記】

転職しました。

blog.shibata.tech

【追記ここまで】

TL;DR;

いわゆる退職エントリ。
誰得ですが一度は書いてみたかったので。

無(職)を取得

新卒入社でだいたい15年くらい勤めた会社を今月末で退職して来月から無職になります。
先月末で事実上の最終出社を終えて今月いっぱい有休消化です。

社名を公表する気はありませんが*1、北海道内のSIerで従業員数が500~1000人くらいの規模感の会社に勤めていました。
皆さんがSIerに持っているイメージを想像してもらえば概ね該当するような会社です。

色々槍玉にあげられるSIerですが、駄目なところしかないのであれば10年以上も勤めるわけがなく、良いところもあれば悪いところもあるといった感じです。
あまり角の立つことも言いたくないので、まあ、「音楽性の違いにより脱退。」とだけ言っておきます。

次を決めずに辞めてしまったのは、実際には数年前から退職の機会をうかがっていたのですが、今年に入り大きめの案件と組織の変更があり、今回のタイミングを逃すとさらに数年単位で退職が困難になるのと、その間に激務でやられてしまう可能性が高かったためです。
あと、人生で一度くらい無職になってみたい、実績解除したいという気持ちもありました。

半ば逃亡に近い感じの退職*2ですが私の心は非常に晴れやかですっきりしております。

今後の予定

当初の予定では2~3カ月くらい静養と勉強の時間に充てて年末か来年から次の職場で働ける様な転職活動をしようと計画していました。
が、いざ退職届を出して無職確定となると「次が無い」という心理的なプレッシャーが思っていたより重くのしかかってきたので早めの転職活動をしつつ可能な限り無職生活を満喫しようと思っています。

ビジネス的な方向性

(厳密にはまだ辞めてませんが)前職では受託で道内企業の基幹業務システムを構築、運用する業務をやっていたのですが、いくつか自社サービスの運営もやっており、あまりビジネス的なこだわりは持っていません。

受託開発、サービス開発どちらでも面白そうな内容で無茶ぶりが無ければ積極的にやっていきたい感じです。

ただ、所謂SESについては距離を置きたいと考えています。

技術的な方向性

SIerというと一切コードを書かず技術要素が皆無というイメージが強いですが、前職はお世辞にも技術レベルが高いとは言えないものの自分らでコードも書きますし社員が技術要素に触れることのできる会社でした。

私自身はその中でも案件ごとの技術検証やインフラの構築と運用、社内開発環境の整備や社内フレームワークのメンテナンスなど行っており、社内でも特に技術寄りの立場にありました。

ただ、諸事情により所謂パブリッククラウドやHCIを扱うことが出来なかったため、これからは

  • AWS
  • Azure
  • Nutanix

あたりを扱うことのできる会社に行きたいなぁという漠然とした思いがあります。

残念ながらこれまで業務として扱っていないため現在の上記に対するスキルは低いです...
無職の間に学習していきたいというのが現状です。

今の技術スキル

職務経歴書をWEB上で公開しようか現在悩み中です。

とはいえ何も公開しないままだと得体の知れない無職のおっさんになってしまうので今の私にある技術スキルを公開します。
公開することで次の職につながる何かがあれば良いな、と、軽く考えております。

基本情報

プログラミングスキル

キャリアの長い順です。

  • VB全般 (VB6、VB.NET、VBA、VBScript)

    • VB6の時代から10年以上業務で扱っており、いちばん自然に書ける言語です。
    • VBA、VBScriptも書けます。
  • C#

    • 業務としては3年程度やっています。プライベートを含めればVBと同じくらいになります。
    • 基本VBを扱ってきたためキャリアとしてはそこまで長くないですが一般的な業務で要求されるレベルには達しているハズ。
  • PowerShell

    • 業務としては5年程度触れています。
    • PowerShellでMicrosoft MVPを受賞させてもらってますし「できる」といっても怒られないレベルにあると自負しています。
  • Python

    • 業務で2年程度触れていました。
    • 基本的な読み書きができ、小規模なアプリケーションを作れるレベルです。
    • Flaskを使った簡単なサイトの構築、独自のNagiosプラグインを作るのに利用しました。
  • Go

    • 業務で1年程度触れていました。
    • 基本的な読み書きができ、小規模なアプリケーションを作れるレベルです。
    • 独自のNagiosプラグインや簡単なCLIツールを作るのに利用しました。
  • Java

    • 他人が書いたコードの解析や簡単な改修ができるレベルです。
    • 基本的な読み書きはできますがあまり得意とは言えません。
  • COBOL

    • 業務で1年程度触れていました。
    • 基本的な読み書きができるレベルでしたが、最近は忘れつつあります...
    • WindowsでNetCOBOLという環境だったため所謂ホスト系の技術要素には疎いです。

他にもいくつかの言語に触れていますが、業務と絡めて列挙できるのはこのくらいです。
併せて以下のエントリもご覧ください。

RDBMS、ミドルウェアなど

こちらもキャリアの長い順です。

  • Oracle

    • Oracle 8i ~ 12c まで10年以上業務で扱っています。
    • Oracleのインストール、論理設計、物理設計、データベース構築、運用一通りのフェーズをこなせます。
    • 現在は失効済みですがOracle Master 10g Gold持ちでした。
    • 専任ではないもののDBAとしての業務経験もあります。
    • Windows RACの構築を何度かしています。
    • Oracle Database Applianceの構築を1度しています。
    • データベースの規模としては小~中規模程度(RAC 2~3ノード、容量数百GB程度)を扱えますが、大規模であったり要件の厳しいミッションクリティカルな環境の経験はありません。
  • SQL Server

    • SQL Server 2008 ~ 2016 まで5年程度扱っています。
    • SQL Serverのインストール、論理設計、物理設計、データベース構築、運用一通りのフェーズをこなせます。
    • データベースの規模としては単一インスタンスの小規模環境を多く扱ってきました。
  • PostgreSQL

    • PostgreSQL 9.2 の環境を1年程度運用したことがあります。
    • 基本的な運用ができるレベルです。
  • Citrix XenApp

    • MetaFrame 4.0、XenApp 5.0、XenApp 7.6を扱ったことがあります。
    • 小規模環境における設計とインストール、運用までを行えます。
    • XenDesktopの経験はありません。
    • 最近扱ってないため若干忘れつつあります。
  • CLUSTERPRO

    • Windows版を5年程度扱ったことがあります。
    • インストールおよび基本的な設定と運用ができます。
    • Oracleのクラスタリングのために利用しました。
  • NEC WebSAM JobCenter

    • Windows版を5年程度扱ったことがあります。
    • インストールおよび基本的な設定と運用ができます。
  • Nagios

    • Nagios Core 4系のインストールとカスタマイズを行い、自社サービスおよび顧客環境の監視基盤を構築し運用した経験があります。
    • 監視ホスト数十~百程度、監視サービス数百程度の小、中規模環境を扱ってきました。
  • HULFT

    • HULFT 6 ~ 7を取り扱った経験があります。
    • インストールと基本的な設定ができます。
  • JP1

    • 幾つかの受託案件で取り扱ったことがあります。
    • あまり詳しくないですが、基本的な概念を理解し運用できるレベルです。
  • GrapeCity製品全般

    • InputMan、SPREAD、MultiRow(すべてWindows Forms版)を使った開発を5年以上行ってきました。
    • ActiveReportsもバージョン6あたりからずっと扱っています。
  • Crystal Reports

    • Crystal Decisions社~Business Objects社の製品だった頃に扱ったことがあります。
    • 基本的な概念はまだ覚えていますが、だいぶ忘れつつあります...
  • SVF

    • Universal Connect/Xを使った帳票サーバーの構築経験があります。

インフラ、仮想化基盤

  • Windows Server

    • Windows 2000 Server ~ Windows Server 2016まで10年以上業務で扱っています。
    • サーバー台数にして数十台規模の企業内サーバーの設計と構築、運用ができるレベルです。
  • RHELおよびCentOS

    • RHEL 5系およびCentOS 6、7系を取り扱った経験があります。
    • サーバー台数にして10台程度までの小規模環境であれば構築、運用ができるレベルです。
    • 基本的な取り扱いができるレベルといえば良いでしょうか。
  • VMware vSphere

    • VMware vSphere 5系および6.0の構築および運用経験があります。
    • 小規模環境の構築のみで、基本的な概念は理解していますが個別の機能に精通するレベルではありません。
  • Hyper-V

    • Windows Server 2008 R2 ~ 2012 R2を親パーティションとする環境の構築および運用経験があります。
    • 小規模環境の構築が多く、簡単なHyper-Vレプリカの環境を構築できます。
  • NEC iStorage

    • エントリモデル(iStorage M300系程度まで)の設計と構築ができます。
    • 簡単な構成であればFC SANの構築経験もあります。

ここに記載していない技術要素の経験もありますがざっとこんな感じです。
インフラからアプリまで手広くやってきましたが、小・中規模のものが多く、広く浅くといった感じですね。

終わりに

意外と長くなってしまいましたが、こんな感じで無職の道を選びました。

ちょっと遅めの夏休みだと思い日々を楽しみつつ、なんとか生き延びて次のステップに進んでいきたい所存です。

*1:もし気になる奇特な方がいれば私に直接お尋ねください

*2:もちろん会社とは円満に話がついており、引き継ぎなどはきちんとやってます。あくまで言葉のアヤですので...

PowerShellでDFSの環境を構築する

以前teratailのこちらの質問に回答した際に簡単な検証環境を作ったのですが、その手順を備忘録を兼ねてエントリとして公開します。

teratail.com

DFSの基本

本エントリではDFSの基本的なことについては触れません。
以下の記事が参考になりますのでご覧ください。

ascii.jp

www.atmarkit.co.jp

検証環境

名前空間サーバ(兼 ドメインコントローラー)1台、ターゲットサーバー1台のシンプルな環境を作ります。
OSはともにWindows Server 2012 R2、最新のWindows Updateと最低限のネットワーク設定が済んでいるところからスタートします。

設定項目 名前空間サーバ ターゲットサーバー
OS Windows Server 2012 R2 Windows Server 2012 R2
コンピューター名 ADSV FLSV
ドメイン corp.contoso.com corp.contoso.com
利用ユーザー administrator administrator

DFSの環境を構築する

1. ドメイン構築

名前空間サーバーで以下のコマンドを実行し、ドメイン corp.contoso.com を作成します。

# マシン名変更
Rename-Computer ADSV -Restart

# (再起動後)ドメイン作成
Add-WindowsFeature AD-Domain-Services, GPMC, RSAT-ADDS, RSAT-AD-PowerShell
Import-Module ADDSDeployment
$Params = @{
    DomainName        = "corp.contoso.com";
    DomainNetbiosName = "CONTOSO";
    ForestMode        = "Win2012R2";
    DomainMode        = "Win2012R2";
    DatabasePath      = "C:\Windows\NTDS";
    LogPath           = "C:\Windows\NTDS";
    SysvolPath        = "C:\Windows\SYSVOL";
    SafeModeAdministratorPassword = (Get-Credential);  # 接続情報
    InstallDns           = $true;
    CreateDnsDelegation  = $false;
    NoRebootOnCompletion = $false;
    Confirm = $false;
}
Install-ADDSForest @Params

2. ターゲットサーバーのドメイン参加

ターゲットサーバーをcorp.contoso.comドメインに参加させます。

# マシン名変更
Rename-Computer FLSV -Restart

# (再起動後)ドメイン参加
Add-Computer -DomainName corp.contoso.com -Restart

3. DFSの設定

名前空間サーバで以下のコマンドを実行してDFSの設定を行います。
最初にDFSの構成に必要な機能をインストールします。

# 機能のインストール
Install-WindowsFeature FS-DFS-Namespace, FS-DFS-Replication, RSAT-DFS-Mgmt-Con

続けてDFSルートを作ります。
名前空間サーバー上にある共有フォルダに対してNew-DfsnRootコマンドを実行してやります。

以下の例では最初にC:\DFSRoots\Publicに共有フォルダPublicを作成し、DFSルート\\corp.contoso.com\Publicを割り当てています。

# DFS設定(名前空間の作成)
$DFSRootPath = '\\corp.contoso.com\Public'
$DFSRootTarget = 'C:\DFSRoots\Public'
$DFSRootSharedPath = "\\$(hostname)\Public"
# 先に共有フォルダを作る
mkdir $DFSRootTarget
New-SmbShare –Name 'Public' –Path $DFSRootTarget -FullAccess everyone
# DFSルート作成
New-DfsnRoot -Path $DFSRootPath -Type DomainV2 -TargetPath $DFSRootSharedPath

DFSルートを作成した次はフォルダターゲットを作成します。
フォルダターゲットにはターゲットサーバー上の共有フォルダが必要なのでInvoke-Commandを使ってリモートから共有フォルダを作成してやります。

以下の例ではターゲットサーバーのC:\DFSTargets\Shareに共有フォルダShareを作成します。
接続情報は適宜設定してください。

# DFSターゲットの設定(共有フォルダの作成)
$DFSTargetHost = 'FLSV'
$DFSTargetCredential = Get-Credential # 接続情報
Invoke-Command -ComputerName $DFSTargetHost -Credential $DFSTargetCredential -ScriptBlock {
    $targetLocalPath = 'C:\DFSTargets\Share'
    mkdir $targetLocalPath
    New-SmbShare –Name 'Share' –Path $targetLocalPath -FullAccess everyone
}

最後にNew-DfsnFolderを使ってこの共有フォルダをDFSフォルダにします。

# フォルダターゲットの作成
$DFSFolderPath = '\\corp.contoso.com\Public\Share'
$DFSFolderTargetPath = "\\$($DFSTargetHost)\Share"
New-DfsnFolder -Path $DFSFolderPath -TargetPath $DFSFolderTargetPath

結果確認

ここまでの結果「DFSの管理」からは以下の様に見え、DFSの構成が上手くいったことが確認できます。

f:id:stknohg:20180717235804p:plain

f:id:stknohg:20180717235814p:plain

f:id:stknohg:20180717235831p:plain

f:id:stknohg:20180717235842p:plain

フォルダへのアクセスも良い感じにできています。

f:id:stknohg:20180717235923p:plain

【補足】DFSDsc

今回は触れませんでしたが、DFSを構築するためのDSC Resourceも当然存在しています。

github.com

このサンプルコードが今回の構成に近いので参考にしてみてください。