Windows 7ユーザーとしてHOMEDRIVEおよびHOMEPATHをオーバーライドする


50

雇用主は、Windows 7ラップトップのHOMEDRIVEを「M:」(マップされたネットワークドライブ)に設定し、HOMEPATHを「\」に設定するActive Directoryグループポリシーを持っています。私はその共有ドライブのルートに対して読み取り専用の権限を持っているため、Windowsホームディレクトリにファイルまたはディレクトリを作成できません。IT部門と協力しようとする試みは失敗しました。

以下のための方法があります私がするグローバルブートやログイン時にこれらのenvarsを変更するには?すべてのアプリケーションで代替値(「C:」や「\ Users \ myname」など)を使用する必要があります。ユーザーのホームディレクトリに設定ファイルを保存するユーティリティ(gvimなど)がインストールされています。

重要:[システムのプロパティ]> [環境変数]でこれらのenvarを変更しても機能しません。これらをユーザー変数とシステム変数の両方として設定しようとしました(再起動を含む)。SET HOMEDOSウィンドウで入力すると、設定が無視されることが明確に示されます。また、Windowsショートカットで「開始」を使用しても、エクスプローラーのコンテキストメニュー項目(「Vimで編集」など)を正しく動作させる必要があるため、これ解決しません。

この会社のラップトップの管理者権限はありますが、Win7の第一人者ではありません。当時、ブートスクリプトはこれを1分で解決していました。今日も可能ですか?ありがとう。


2
IT部門がこれらのポリシーを設定したのには理由があります。あなたが彼らと一緒にそれを解決しようとし、彼らがそれを変更することを拒否した場合、おそらく正当な理由があります。あなたが彼らの助言を無視し続け、あなたが捕まったら彼らが懲戒処分の準備をする彼らが尋ねたものに反対し続けるならば。
ジョーテイラー

28
この業界に30年以上携わった後、平均的なPCユーザーのITポリシーは、開発者やパワーユーザーにとって不十分な(あるいは邪魔になる)ことが多いことを学びました。ITは開発者のニーズに異なる方法で対応しなければならないことがよくあります。これが彼らにとってこのような学習経験である場合は、喜んでお手伝いします。ユーザーのホームディレクトリを使用できないようにする正当なビジネス上の理由を聞きたいです。
MykennaC

2
なぜ問題を悪化させないか、特定のユーザーにとってそれが機能しないことを示し、そのようなユーザーに別のGPOを提案する。この建設的な方法での移動は、ハッキングでドメインポリシーをバイパスしようとするよりもはるかに有効です。
ジョーテイラー

6
ITがようやく戻ってきました。彼らは何も変えません。はい、会社の公式ポリシーでは、ファイルの作成が許可されていないユーザーホームディレクトリを提供します。環境設定ファイルなどにデフォルトのユーザーホームディレクトリを使用しようとするWindowsアプリケーションは失敗します。ここに回避策を提供できるウィザードはありませんか?
MykennaC

3
はい、@ D0rf、彼はロールオーバーして、ただそれを取るべきです。ITがあなたの仕事を不可能にした場合、あなたはそれが変わるまで戦い、大騒ぎを起こす必要があります。あなたが受動的な開発者なら、あなたはあなたの仕事に必要なツールを提供しないひどい会社で人生にあなたの多くに値します。
スコット

回答:


38

以下は、私が開発したいくつかのハックです。これらはエレガントではありませんが、企業環境で機能する場合があります。

ホームドライブのみ

多くのアプリケーションがHOMEDRIVE / HOMEPATHのみを使用しているようです。その場合、ベースドライブ文字をUNCドライブ管理パスを介してローカルユーザーパスに再マップする起動スクリプトを作成できます。

set HOME
HOMEDRIVE=G:
HOMEPATH=\
HOMESHARE=\\Server\Users\username

net use g: /delete
net use g: \\localhost\C$\Users\username

HOMEDRIVEローカルデフォルト

名前で「サーバー」にアクセスする必要がない場合、グループポリシー設定が失敗し、ローカルマシンにフォールバックする可能性があります。これを行う最も簡単な方法は、次のようなエントリをC:\ Windows \ System32 \ drivers \ etc \ hostsに追加することです。

127.0.0.1   Server

再起動後、次のように表示されます。

set HOME
HOMEDRIVE=C:
HOMEPATH=\Users\username

ハイブリッドローカル/リモートUNCパスを使用したHOMEDRIVE / SHARE

いくつかのUNCパスに対して名前で「サーバー」にアクセスしたいが、他のローカルパスで上書きしたい場合は、次の憎悪を開発しました。注:「サーバー」への直接サーバー接続は、引き続きローカルマシンに解決されます。「サーバー」がファイルサーバーのみである場合にのみ、このソリューションをお勧めします。

  1. 変更C:\ WINDOWS \ System32に\ドライバを\ ETC \ホストするローカルマシンに"サーバー"をリダイレクトします:

    127.0.0.1   Server
    
  2. 次のMulti-Stringレジストリ値をHKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ MSV1_0に追加して、資格情報がローカルUNCパスに渡されるようにします。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\
    BackConnectionHostNames = Server
    
  3. サーバーのルートとして機能するダミーディレクトリを作成します。

    set DUMMY_LOC=C:\Server_Dummy
    
    mkdir %DUMMY_LOC%
    cd /D %DUMMY_LOC%
    
  4. 実サーバーに送信する各UNCパスについて:

    rem Alternatively you can use an IP below, but it is more likely to break if DNS changes
    set SERVER_FQDN=Server.network.blah.com
    
    rem Take a look at what's available...
    net view \\%SERVER_FQDN%\
    
    mklink /D Remote_Example \\%SERVER_FQDN%\Remote_Example
    net share Remote_Example=%DUMMY_LOC%\Remote_Example /grant:everyone,FULL
    
  5. ローカルに定義する各UNC共有(ユーザーなど)に対して:

    rem The link isn't really necessary for the share, I just find it easier to manage when all of these hacks are in the same directory
    
    mklink /D Users C:\Users
    net share Users=%DUMMY_LOC%\Users /grant:everyone,FULL
    
  6. リブート

この例では、次のUNCパスを解決できます。

\\Server\Remote_Example => \\Server.network.blah.com\Remote_Example
\\Server\Users          => C:\Users

このパス解決は、ドライブマッピングの前に行う必要があります。マッピングに関連付けられたUNCパスが有効である限り(ローカルまたはリモート)、ドライブ文字は期待どおりに動作する必要があります。

たとえば、私のセットアップでは、次の変数がドメインによって強制されます。

set HOME
HOMEDRIVE=G:
HOMEPATH=\
HOMESHARE=\\Server\Users\username

しかし、私のマッピングのため、結果は次のとおりです。

G: => \\Server\Users\username => C:\Users\username

これらの提案は、コマンドラインで作業していた場合に役立つようです。アプリ(gvimなど)に影響を与えるには、おそらくラッパーを作成する必要があります。影響を受けるすべてのアプリを繰り返し処理することは、ファイルの関連付けの変更などは言うまでもなく、多くの作業のように聞こえます。ブート時にM:ドライブを再マッピングするのは良い提案ですが、Windowsの起動時にグローバルにそれを行う方法アプリ/シェル)?これらの提案が他の人に役立つことを願っていますが、私のOP
MykennaC 14

3
しばらくこれらのメソッドは必要ありませんでしたが、gvim専用に開発したことを思い出します。これは、HOMEDRIVEとHOMEPATHを使用していたと思います。これらの方法では、コマンドラインから実行する必要はありません。変数またはドライブ文字を使用するアプリケーションはすべて影響を受けます。方法#2と#3は「永続的」であり、変更を適用するには1回だけ実行する必要があります。方法1は、C:\ Users \ <You> \ AppData \ Roaming \ Microsoft \ Windows \ Start Menu \ Programs \ Startupにショートカットを配置するか、タスクスケジューラでタスクを設定することにより、起動時に自動的に実行できます。これがお役に立てば幸いです!
テランス14

@terrance Ahhh、よく練られた憎悪の美しさ。LMAO。ここでの情報をお寄せいただきありがとうございます-と...ここにトンがある
デイヴィッドI.マッキントッシュ

3

私が見つけた最良の解決策は、ログイン中とその前に変数を設定することでしたuserinit.exe

これは私がやったことです。最初のバッチファイルを作成C:\Windows\System32\userinit.cmd含みます

@ECHO OFF
SET HOMEDRIVE=C:
SET HOMEPATH=\Users\%USERNAME%
SET HOMESHARE=\\localhost\C$\Users\%USERNAME%
@START C:\Windows\system32\userinit.exe

その後、レジストリのの値を変更HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\UserinitC:\Windows\System32\userinit.cmdました。

詳細情報:https : //technet.microsoft.com/en-us/library/cc939862.aspx


Win7では動作しましたが、Win10では動作しませんでした。
アリ


0

これらのパスは、ユーザープロファイルがある場所に自動的に設定されると思います。参照しているホームドライブは、ntuser.datとアプリケーションデータ、およびその他のユーザープロファイルフォルダーが存在する場所です。NT3.xに戻ると、「ユーザープロファイル」は設定されたユーザーレジストリハイブであり、ユーザーごとに個別のホームパスを設定できました。これらは、デスクトップ、マイドキュメント、スタートメニューなどのユーザープロファイルとしてNT4で統合されました。

すべてのプロファイルの場所は、以下のレジストリキーに保存されます。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

特別なプロファイルとサブキーの値がいくつかあります:システム上のアクティブなプロファイルごとに1つです。これらは、所属するユーザーアカウントのSIDによって設定されます。自分のものを見つける最も簡単な方法は、それぞれをスクロールして、正しいProfileImagePath値(値の下)を探すことです。その値を任意のパスに変更することができるはずです。次回ログオンしたときに有効になります。最初にファイルを新しいパスにコピーしてください。

ログインしているアカウントからプロファイルを移動する必要がある場合(つまり、MikeCとしてログインしていて、MikeCのプロファイルをコピーしようとしている場合)、ntuser.datファイル(を含むレジストリハイブHKEY_CURRENT_USER)はカーネルによってロックされます。ハイブをコピーすることもできます。regeditに移動し、右クリックしてHKEY_CURRENT_USER[エクスポート]を選択し、タイプをレジストリハイブファイル変更して、新しい場所にntuser.datとして保存します。

私の経験では、何かが間違って設定されているためにwinlogonがプロファイルの読み込みに問題がある場合、デフォルトのプロファイルから新しいコピーを作成するか、そのセッションで使用する一時コピーを提供しますが、それでもログを記録できますin。ただし、何か問題が発生した場合に備えて、システムで別の管理者ログインを使用することをお勧めします。


まあ、ProfileListで関連があると思われる唯一の項目はProfileImagePathで、C:\ Users \ mcepekとして表示されます。これは、SET USERPROFILEが私に示したものと一致しますが、ここでの焦点では​​ありません。HOMEPATHとHOMEDRIVEに影響を与える必要があります。ただの楽しみのために、値またはデータが「M:」に設定されたアイテムをレジストリで検索し(文字列全体に一致=チェック)、Computer / HKEY_USERS / xxxx / Volatile Environment / HOMEDRIVEのみを見つけました。C:に変更しても、現在のログインセッションでは何の影響もありませんでした。再起動後、値はM:に戻りました(驚くことではありません)。
MykennaC


0

やや簡単な代替策は、ログオン、ロック解除、および数分ごとにスケジュールされたタスクとして以下のスクリプト(env-reset.vbs)を実行することです。

Set shell = WScript.CreateObject("WScript.Shell")  
Set venv = shell.Environment("Volatile")  

scriptingHost = LCase(Right(Wscript.FullName,Len("cscript.exe")))
interactive = Wscript.Interactive And (scriptingHost = "cscript.exe")

If interactive Then 
  Wscript.Echo "WSCRIPT"
  Wscript.Echo "  ScriptingHost = " & scriptingHost
  Wscript.Echo "  FullName = " & Wscript.FullName
  Wscript.Echo "  ScriptFullName = " & Wscript.ScriptFullName
End If  

If interactive Then Call showVolatile()

homedrive = Left(venv("USERPROFILE"),2)
homepath = Mid(venv("USERPROFILE"),3)
If interactive Then 
  Wscript.Echo "COMPUTED"
  Wscript.Echo "  homedrive = " & homedrive
  Wscript.Echo "  homepath = " & homepath
End If  
venv("HOMEDRIVE") = homedrive
venv("HOMEPATH")  = homepath

If interactive Then Call showVolatile()

Wscript.Quit(0)

Sub showVolatile()
  Wscript.Echo "VOLATILE"
  Wscript.Echo "  USERPROFILE = " & venv("USERPROFILE")  
  Wscript.Echo "  HOMEDRIVE = " & venv("HOMEDRIVE")  
  Wscript.Echo "  HOMEPATH = " & venv("HOMEPATH")  
  Wscript.Echo "  HOMESHARE = " & venv("HOMESHARE")  
End Sub
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.