2019年4月10日水曜日

PowerShellで自分のPC上のOneDrive物理フォルダ名を知りたい

マイクロソフトのOneDriveですが、オンラインストレージとは言え、自分のPC上のOneDrive物理フォルダと対応しています。

SQL-Server 2017 Express等でOneDrive上のファイルを読み書きする時は、オンライン上のURLを指定するのではなく、PC上の物理フォルダを指定して読み書きします。

すると、自動的にシステムがファイルを塩梅良く処理してくれる・・・という流れになっています。

その自分のPC上のOneDrive物理フォルダを取得するのに少し迷ってしまいました。


■OneDriveは環境変数から求める

結論から先に書かせて頂きますと、環境変数から求めたら出来ました。


($Env:OneDrive)

↑PowerShellは、($Env:環境変数名) という書き方によって、環境変数の内容が取得出来て、COPY-ITEMなどのパラメータとして利用出来るのですが、OneDriveを指定すると、OneDrive物理フォルダ名が取得できました。

私の場合、複数のPCでOneDrive物理フォルダの場所が違うため、スクリプトを一本化するのに必要な内容でした。


■ちなみに特殊フォルダを取得する時(OneDriveは取得不可)


[Environment]::GetFolderPath("desktop")

↑ちなみに、デスクトップなど特殊フォルダの物理フォルダ名を求める時は、[Environment]クラスのスタティックメソッド(get-member -staticにパイプするとクラスのメンバー名が見られます)のGetFolderPathで分かるのですが、OneDriveはありませんでした。




"GetFolderPath" の引数 "folder" (値 "help") を型 "System.Environment+SpecialFolder" に変換できません: "値 "help" を型 "
System.Environment+SpecialFolder" に変換できません。エラー: "識別子名 help は有効な列挙子名に一致しません。次のいずれか
の列挙子名を指定して再試行してください:
Desktop, Programs, MyDocuments, Personal, Favorites, Startup, Recent, SendTo, StartMenu, MyMusic, MyVideos, DesktopDire
ctory, MyComputer, NetworkShortcuts, Fonts, Templates, CommonStartMenu, CommonPrograms, CommonStartup, CommonDesktopDir
ectory, ApplicationData, PrinterShortcuts, LocalApplicationData, InternetCache, Cookies, History, CommonApplicationData
, Windows, System, ProgramFiles, MyPictures, UserProfile, SystemX86, ProgramFilesX86, CommonProgramFiles, CommonProgram
FilesX86, CommonTemplates, CommonDocuments, CommonAdminTools, AdminTools, CommonMusic, CommonPictures, CommonVideos, Re
sources, LocalizedResources, CommonOemLinks, CDBurning""
発生場所 行:1 文字:1
+ [Environment]::GetFolderPath("help")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument


↑ちなみに、GetFolderPathの中に"help"など特殊フォルダ名として存在しない名前を指定すると、当然エラーメッセージが表示されるのですが、メッセージの内容がとても親切で「何を指定したら良いのか」というのを教えてくれます。