環境変数 – Windows 7 ユーザとして HOMEDRIVE と HOMEPATH をオーバーライドする

active-directory environment-variables windows-7

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

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

重要: “システムのプロパティ > 環境変数” でこれらの環境変数を変更してもうまくいきません。私は、これらをユーザ変数とシステム変数の両方に設定してみました(再起動を含む)。DOSウィンドウでSET HOMEと入力すると、私の設定が無視されていることがはっきりとわかります。また、エクスプローラのコンテキストメニュー項目(”Edit with Vim “のようなもの)が正しく動作する必要があるため、Windowsのショートカットで “Start in “を使用しても解決しません

私はこの会社のラップトップの管理者権限を持っていますが、私はWin7の達人ではありません。昔は、起動スクリプトを使えばすぐに解決しただろう。それは今日も可能ですか?ありがとうございます

  54  MykennaC  2011-03-09


ベストアンサー

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

HOMEDRIVE Only

HOMEDRIVE / HOMEPATHしか使わないアプリケーションが多いようです。その場合は、UNCドライブの管理パスを経由して、ベースとなるドライブレターをローカルユーザーのパスにリマップするスタートアップスクリプトを作成します

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

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

HOMEDRIVE ローカルデフォルト

名前で「Server」にアクセスする必要がない場合は、グループポリシー設定が失敗して、ローカルマシンにフォールバックすることができます。一番簡単な方法は、「C:\\WindowsSystem32\driversetc\hosts」に、次のようなエントリを追加することだ

127.0.0.1   Server

再起動すると、以下のようなものが表示されるはずです

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

ハイブリッドなローカル/リモートUNCパスを持つHOMEDRIVE/SHARE

もし、いくつかの UNC パスの名前で “Server” にアクセスしたいが、他のパスをローカルパスで上書きしたい場合、私は次のような忌まわしいものを開発しました。注意: “Server “への直接のサーバ接続は、ローカルマシンに解決されます。私は、”Server “がファイルサーバでしかない場合にのみ、この解決策をお勧めします

  1. サーバーをローカルマシンにリダイレクトするように変更します

    127.0.0.1   Server
    
  2. 証明書がローカルUNCパスに渡されることを許可するために、次のMulti-Stringレジストリ値をHKEY_LOCAL_MACHINE_MACHINE\SYSTEM\CurrentControlSet\ControlLsaMSV1_0に追加します

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

    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共有(Usersなど)に対して

    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. Reboot

この例では、以下の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

42  Terrance  2012-10-05


私が見つけた最良の解決策は、ログイン中と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\Userinitの値をC:\Windows\System32\userinit.cmdに変更しました

詳細はこちらをご覧ください。https://technet.microsoft.com/en-us/library/cc939862.aspx

3  Ali Malekpour  2016-08-04


私は起動スクリプトでSETXを使用しましたが、それは私のために機能しました。私の回答を参照してください

1  Mark Mikofski  2012-11-15


これらのパスは自動的にユーザープロファイルのある場所に設定されていると思います。あなたが参照しているホームドライブとは、ntuser.datやアプリケーションデータ、その他のユーザープロファイルフォルダがある場所のことですよね?NT3.xでは、”ユーザープロファイル “はユーザーレジストリのハイブに設定を入れただけのもので、ユーザーごとにホームパスを設定することができました。それがNT4では、デスクトップ、マイドキュメント、スタートメニューなどを含むユーザープロファイルとして統一されました

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

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

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

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

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

0  Chris Smith  2011-08-17


他の誰かがgoogle経由でこの質問をしてきた場合に備えて、私はこれを投稿しています。ホームディレクトリを変更してISの人たちに怒られる代わりに、私は仮想マシン上で開発をセットアップして実行しました。マイクロソフトは仮想モードでWidows XPを提供しています。http://www.microsoft.com/windows/virtual-pc/download.aspx

0  Christine Gregory Nicholls  2013-04-03


もう少し簡単な方法としては、以下のスクリプト(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

0  camilohe  2014-09-24


タイトルとURLをコピーしました