tag:blogger.com,1999:blog-14562778234862350932024-03-13T17:56:00.052-04:00joystick junkieaaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.comBlogger121125tag:blogger.com,1999:blog-1456277823486235093.post-40004348150242788492015-05-03T15:05:00.001-04:002015-05-03T15:05:27.759-04:0098% As Good As Sex Chocolate Chip Cookies
<br />
<h3 class="MsoTitle" style="margin: 0in 0in 0pt;">
Because if they were better than sex, you're doing sex wrong.<o:p></o:p></h3>
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: Calibri Light;"></span></span></span><br />
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: Calibri Light;">Ingredients<o:p></o:p></span></span></span><br />
<span style="font-family: Calibri;">2 1/2 C + 2TBSP all-purpose flour<o:p></o:p></span><br />
<span style="font-family: Calibri;">3/4 C granulated white sugar<o:p></o:p></span><br />
<span style="font-family: Calibri;">3/4 C packed brown sugar<o:p></o:p></span><br />
<span style="font-family: Calibri;">7 oz. semi-sweet chocolate chips<o:p></o:p></span><br />
<span style="font-family: Calibri;">7 oz. dark chocolate chips<o:p></o:p></span><br />
<span style="font-family: Calibri;">1/2 C butter-flavored Crisco<o:p></o:p></span><br />
<span style="font-family: Calibri;">1/2 C + 1 TBSP I Can't Believe It's Not Butter Margarine<o:p></o:p></span><br />
<span style="font-family: Calibri;">1 TBSP milk<o:p></o:p></span><br />
<span style="font-family: Calibri;">1 TBSP vanilla extract<o:p></o:p></span><br />
<span style="font-family: Calibri;">1/2 C finely chopped pec<o:p></o:p></span><br />
<span style="font-family: Calibri;">1 tsp baking soda<o:p></o:p></span><br />
<span style="font-family: Calibri;">1/2 tsp salt<o:p></o:p></span><br />
<span style="font-family: Calibri;">3 TBSP Egg beaters / egg whites (or 1 large egg)<o:p></o:p></span><br />
<br />
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: Calibri Light;">Tools<o:p></o:p></span></span></span><br />
<span style="font-family: Calibri;">Digital Scale<o:p></o:p></span><br />
<span style="font-family: Calibri;">Ice Cream Scoop or large spoon<o:p></o:p></span><br />
<span style="font-family: Calibri;">Non-stick cookie sheet<o:p></o:p></span><br />
<span style="font-family: Calibri;">Parchment paper<o:p></o:p></span><br />
<span style="font-family: Calibri;">Nylon spatula<o:p></o:p></span><br />
<o:p><span style="font-family: Calibri;"> </span></o:p><br />
<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">1.</span><span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><!--[endif]--><span style="font-family: Calibri;">Pre-heat oven to 375 degrees.<o:p></o:p></span><br />
<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">2.</span><span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><!--[endif]--><span style="font-family: Calibri;">Sift all dry ingredients together except
chocolate chips.<o:p></o:p></span><br />
<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">3.</span><span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><!--[endif]--><span style="font-family: Calibri;">In a stand mixing bowl, mix all wet ingredients,
and then slowly pour in dry ingredients.<o:p></o:p></span><br />
<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">4.</span><span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><!--[endif]--><span style="font-family: Calibri;">Stir in chocolate chips with a wooden spoon.<o:p></o:p></span><br />
<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">5.</span><span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><!--[endif]--><span style="font-family: Calibri;">Using an ice cream scoop, measure out approximately
80g of dough.<span style="mso-spacerun: yes;"> </span>Making them within 5g of each other ensures even baking time.<span style="mso-spacerun: yes;"> </span>Should
make 16 cookies, taking “nibbling” into consideration.<o:p></o:p></span><br />
<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">6.</span><span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><!--[endif]--><span style="font-family: Calibri;">Place dough in balls approximately 2 1/2 inches
apart on tray.<o:p></o:p></span><br />
<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">7.</span><span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><!--[endif]--><span style="font-family: Calibri;">Bake for 9 minutes; remove from oven and let sit
on sheet for an additional 2 minutes before transferring to parchment paper
with a nylon spatula.<o:p></o:p></span><br />
aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-34653137417943007212014-02-20T09:01:00.001-05:002014-02-20T09:01:11.250-05:00The *real* math behind the beer tab tax comparisonI wrote this a while ago for a Facebook post a few years ago as a reply on some vitriol spewed by Glenn Back, basically regurgitating the beer tab analogy to our tax system.<br />
<br />
-----<br />
<br />
Too bad Mr. Beck (along with most of the world) doesn't understand how progressive taxes really work, and how the American tax system in particular works. There are some key facts that he has elected to leave out. But before we get to what's missing from Beck's mischaracterization of taxes, a quick primer on the American progressive taxation system.<br />
<br />
There are five main different systems of taxes in the US: sales taxes, payroll taxes, income taxes (standard and the alternative minimum tax), and capital gains taxes:<br />
<br />
<strong>Sales Tax</strong><br />
<br />
Pretty easy. It's a flat tax determined by your state and applied to products that you purchase. It's consumption based and regressive. Consumption meaning, you pay it on the things you purchase or consume; regressive meaning that it disproportionally affects those with lower incomes. The only method to legally avoid this tax is not to buy stuff. In most states, unprepared food (groceries) is exempt from sales tax, while prepared food (restaurants) is not.<div>
</div>
<strong>Payroll taxes </strong><br />
<br />
Wage earners pay these. It's your combined Social Security and Medicare tax. The current rates are 4.2% for SS tax (up to the first $110,100 of earned income) and 1.45% for Medicare (no earned income limit). These taxes only applies to wages, not to investment or dividend income.<div>
</div>
<strong>Income Taxes</strong><br />
This is the most complex of the taxes. The standard tax is currently divided into 6 brackets for two filing statuses: Married Filing Jointly (MFJ) and Single (S):<div>
</div>
Bracket, Income range for MFJ, Income range for S<br />
10%, $0-$17,400, $0-$8,700<div>
15%, $17,400-$70,700, $8,700-$35,350</div>
<div>
25%, $70,700-$142,700, $35,350-$85,650</div>
<div>
28%, $142,700-$217,450, $85,650-$178,650</div>
<div>
33%, $217,450-$388,350, $178,650-$388,350</div>
<div>
35%, Over $388,350, Over $388,350</div>
<br />
The AMT is a lot more complicated and applies to about 4% of US households in a given tax year and kicks in around $175,000 (give or take), and is always a moving target because Congress changes the income threshhold. Since it applies to such a small portion of people, we're going to ignore it for this discussion and treat those people like normal tax payers.<br />
<br />
<strong>Captial Gains tax</strong><br />
Taxes on investment income (dividends, sales of stocks/bonds). It is currently 10% or 15%, depending on qualifying investments and such.<br />
<br />
As to the parts that Beck (and other commentators) either doesn't know or conveniently leaves out:<br />
<br />
<ol>
<li>Everyone pays taxes (depsite the claims that half the population doesn't pay any). They may, however, get rebates and deductions that make their overall tax liability zero, but before those get applied, everyone pays taxes. One of those credits for lower-income and middle-income earners is the Earned Income Tax Credit, the expanse of which championed by the patron saint of the Republican Party, Ronald Reagan in the Tax Reform Act of 1986.</li>
<li>Everyone pays the same rates on their earned portion of income.</li>
<li>When politicians are talking about "the rich pay less taxes" or "making everyone pay their fair share," they're not talking about income derived from salaries or wages. What they're talking about is the primary source of income for the wealthy--investments. If you have an income of $400,000 per year, and you receive that income as wages, you'll pay something in each of the six tax brackets. If that income comes from investments, you're going to be paying the 10% or 15% rates.</li>
</ol>
So, let's take a look at three individuals, and assume that neither have any deductions or exemptions (because this is an FB post and they have limits. Also, I'm not an accountant or tax professional, so I'm not going to run really complicated numbers). <br />
<br />
Individual 1 is a Joint filer with a salary of $84,000. Individual 2 is an investor whose $168,000 income came solely from sales of his long term stock holdings. Individual 3 is a "high-income wage earner," with wages of $400,000.<br />
Individual 1's tax liability looks like this:<div>
Income (Salary) $84,000</div>
<div>
FICA (4.2%), -$3,528 ($84,000 * 4.2%)</div>
<div>
10% Bracket, -$1,740 ($17,400 cap * 10%)</div>
<div>
15% Bracket, -$7,955 (($70,700 minus first $17,400) * 15%)</div>
<div>
25% Bracket, -$3,325 (($84,000 minus first $70,700) * 25%))</div>
Total liability: $16,548 on a total income of $84,000, or 19% of Individual 1's income is taxed<br />
Individual 2's tax liability looks like this:<div>
Income (sale of stocks) $168,000</div>
<div>
FICA (4.2%), $0 (only applies to earned income)</div>
<div>
n% Bracket, $0 (only applies to earned income)</div>
<div>
10% Capital gains liability, $16,800</div>
Total liability: $16,800 on an income of $168,000, or 10% of Individual 2's income<br />
<br />
In this example, Individual 2 had *twice* as much income and was taxed only $452 more (or paid half as much tax proportional to their income).<br />
Individual 3's tax liability looks like this:<div>
Income (Salary) $400,000</div>
<div>
FICA - SS (4.2%), -$4,624.20 ($110,100 * 4.2%)</div>
<div>
FICA - Medicare (1.45), -$4,203.55 (($400,000 minus $110,100) * 1.45%)</div>
<div>
10% Bracket, -$1,740 ($17,400 cap * 10%)</div>
<div>
15% Bracket, -$7,955 (($70,700 minus first $17,400) * 15%)</div>
<div>
25% Bracket, -$18,000 (($142,700 minus first $70,700) * 25%)</div>
<div>
28% Bracket, -$20,930 (($217,450 minus first $142,700) * 28%)</div>
<div>
33% Bracket, -$56,397 (($388,350 minus first $217,450) * 33%)</div>
<div>
35% Bracket, -$4,077.50 (($400,000 minus first $388,350) * 35%)</div>
Total liability: $117,927.25 on an income of $400,000, or 29.5% of Individual 3's income<br />
<br />
As you can see, the tax system is unfairly weighted against wage-earners (as opposed to people who derive their income from investments). Why should one type of income be "preferred" over another? Individual 2 gets a pretty sweet deal in this case. Individual 2 wouldn't pay the same dollar amount in taxes as individual 3 until he gets to $1.17 million in income (he'd be paying the same 10% capital gains tax). When Democrats are talking about the wealthy paying their "fair share," *this* is what they're talking about, not some silly math on a beer tab.<br />
<br />
If we took Glenn's beer tab example and applied the US's real wage distribution against it, it would look dramatically different. According to the Tax Foundation (<a href="http://taxfoundation.org/article/summary-latest-federal-individual-income-tax-data-0#table1">http://taxfoundation.org/article/summary-latest-federal-individual-income-tax-data-0#table1</a>), I think it would look more like this:<br />
1 - $2.30<div>
2 - $2.30</div>
<div>
3 - $2.30</div>
<div>
4 - $2.30</div>
<div>
5 - $2.30</div>
<div>
6 - $19.18</div>
<div>
7 - $19.18</div>
<div>
8 - $19.18</div>
<div>
9 - $19.18</div>
<div>
10 - $11.80</div>
<br />
That being said, persons 6-9 (who represent the 50th through 99th percentile or the middle class) pay 75% of the bill, while the bottom 50% and the top 1% pay roughly the same percentage.<br />
<br />
In other terms, 40% of the people pay 75% of the bill, and 60% of the people pay 25% of the bill. Not terribly fair.aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-403538432031431522014-01-25T11:22:00.001-05:002014-01-25T11:30:26.957-05:00Flaky, Chewy BrowniesThis morning, I had a craving for brownies. Like 1am craving. What's a guy to do when this urge hits and the normal ingredients (a.k.a. "the box") aren't available?<br />
<br />
Improvise. And make the best damn brownies ever.<br />
<br />
<strong>Ingredients</strong><br />
<ul>
<li>12 oz semi-sweet chocolate chips</li>
<li>1 stick unsalted butter</li>
<li>1/2C + 2 T solid coconut oil</li>
<li>1/2 tsp salt</li>
<li>4 eggs</li>
<li>2 tsp vanilla</li>
<li>2 1/2C powdered/confectioner's sugar</li>
<li>1 1/4C all-purpose flour</li>
<li>1 T water</li>
<li>Baking spray (non-stick spray with flour)</li>
</ul>
<strong>Equipment</strong><br />
<ul>
<li>Wire whisk</li>
<li>Large mixing bowl</li>
<li>Rubber spatula</li>
<li>One 9"x11" or two 8"x6" glass baking dishes </li>
</ul>
<strong>Preparation</strong><br />
<ol>
<li>Pre-heat oven to 325 degrees F.</li>
<li>Grease with the baking spray.</li>
<li>In a medium Teflon saucepan, begin heating the chocolate chips, butter, and coconut oil, stirring occasionally.</li>
<li>In a large mixing bowl, beat all four eggs, vanilla, and water with a whisk. Fold in the powdered sugar and salt.</li>
<li>Remember to stir the chocolate chips.</li>
<li>Continue stirring the batter. Add in the flour.</li>
<li>Remove the melted mixture from heat.</li>
<li>Stir the egg and flour mixture until it's as smooth as it can be, until your hand hurts, or for about 2 minutes.</li>
<li>Slowly add the melted chocolate chip mixture to the mixing bowl.</li>
<li>Stir some more until the mixture is smooth.</li>
<li>Pour the batter into the baking dish(es) and place them in the oven.</li>
<li>Set the timer for 25 minutes and grab a Disaronno.</li>
<li>At the 25 minute mark, stick a wooden toothpick, chopstick, or skewer in. If it comes out super-gooey, add another two minutes.</li>
<li>Lather, rinse, repeat, but don't get any soap in the brownies, because that will suck.</li>
<li>When the wooden insertion tool comes out mostly clean (not all the way clean--it's kind of an art at this point), take the brownies out of the oven and set on a wire rack to cool.</li>
</ol>
<strong>Consummation</strong><br />
<ol>
<li>Once they've cooled so you can cut them, do so.</li>
<li>Pour a cold glass of milk. Rum optional.</li>
</ol>
aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-43161798533304846072013-09-16T14:58:00.003-04:002013-09-16T14:59:22.874-04:00Copy attribute from one field to another with PowerShellThis week, while prepping two different customers for single-signon to Office 365, I ran into the same issue--the userPrincipalName attribute was correctly populated (<a href="mailto:username@domain.com">username@domain.com</a>), but the email address was blank. So, to rectify this problem, I put together a script that reads the UPN attribute and then copies to the the mail attribute.<br />
<br />
Leave me a comment if you find it useful!<br />
<br />
<span style="color: #3d85c6;"><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;"># Populate "mail" attribute with UPN<br />
</span></span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;">
</span></span><b><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;">Import-Module</span></span></span></b><span style="font-family: Courier New;"><span style="font-family: Courier New;"> </span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;">ActiveDirectory</span></span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;"> </span></span></span><br />
<span style="color: #3d85c6;"><span style="font-family: Courier New;"><span style="font-family: Courier New;">
</span></span><b><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;">Get-ADUser </span></span></span></b><i><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;">-LDAPFilter</span></span></span></i><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;"></span></span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;"> </span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;">'(userPrincipalName=*)'</span></span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;"> `</span></span></span><br />
<span style="color: #3d85c6;"><i><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;">-Properties</span></span></span></i><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;"></span></span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;"> userPrincipalName,mail | </span></span><b><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;">Select-Object</span></span></span></b><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;"></span></span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;"> </span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;">*</span></span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;"> | `</span></span></span><br />
<span style="color: #3d85c6;"><b><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;">ForEach-Object</span></span></span></b><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;"></span></span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;"> { </span></span><b><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;">Set-ADObject</span></span></span></b><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;"></span></span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;"> </span></span><i><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;">-Identity</span></span></span></i><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;"></span></span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;"> `</span></span></span><br />
<span style="color: #3d85c6;"><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;">$_</span></span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;">.DistinguishedName </span></span><i><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;">-Replace</span></span></span></i><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;"></span></span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;"> `</span></span></span><br />
<span style="color: #3d85c6;"><span style="font-family: Courier New;"><span style="font-family: Courier New;">@{mail</span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;">=</span></span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;">$(</span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;">$_</span></span></span><span style="font-family: Courier New;"><span style="font-family: Courier New;">.userPrincipalName)} }</span></span></span><br />
<span style="font-family: Courier New;"><span style="font-family: Courier New;"></span></span><span style="color: #3d85c6;"> </span><br />
<span style="font-family: Courier New; font-size: x-small;"></span><span style="color: #3d85c6;"> </span>aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com1tag:blogger.com,1999:blog-1456277823486235093.post-84094893486604199422013-08-06T21:45:00.003-04:002013-08-06T21:45:43.448-04:00Managing via WinRM<h2>
What is WinRM?</h2>
WinRM, for those of you not in the know, is really the Microsoft answer to an age-old problem in the Windows world--remote command and task execution. It's the Windows equivalent of the Unix rsh, a native implementation of the PsExec (albeit, with the added complexity that seeps into nearly all Microsoft technologes). It's built on SOAP, so it's intended to be firewall-friendly.<br />
<br />
The quick guide to enabling it:<br />
<br />
On a server you wish to enable WinRM managment, open an elevated command or PowerShell prompt and run <strong><span style="font-family: "Courier New", Courier, monospace;">winrm quickconfig</span></strong>. Answer "Yes" to create the listener and open the necessary ports in the Windows Firewall.<br />
<br />
Once that's done, you may need to set the configuration to allow you to connect to it and issue remote commands. You can do this by by opening an elevated command or PowerShell prompt and entering one of the following command examples:<br />
<br />
<h4>
Add a single trusted remote management host</h4>
<strong><span style="font-family: "Courier New", Courier, monospace;">winrm set winrm/config/client '@{TrustedHosts="server1"}'</span></strong><br />
<strong></strong><br />
<h4>
Add multiple trusted remote management hosts</h4>
<span style="font-family: "Courier New", Courier, monospace;"><strong>winrm set winrm/config/client </strong><strong>'@{TrustedHosts="server1,server2"}'</strong></span><br />
<br />
<h4>
Make every host trusted (not advised)</h4>
<span style="font-family: "Courier New", Courier, monospace;"><strong>winrm set winrm/config/client </strong><strong>'@{TrustedHosts="*"}'</strong></span><br />
<strong><span style="font-family: Courier New;"></span></strong><br />
<h2>
Now What?</h2>
Let's say you want to execute a command against a WinRM host. To do this, use the command <strong>winrs</strong>.<br />
<br />
For example, to open a command prompt on server2, you would run:<br />
<strong></strong><br />
<strong><span style="font-family: "Courier New", Courier, monospace;">winrs -r:server2 cmd</span></strong><br />
<br />
For a whole bunch of other stuff you can do with WinRM, please see the following (much more technical) articles:<br />
<br />
<a href="http://blogs.technet.com/b/otto/archive/2007/02/09/sample-vista-ws-man-winrm-commands.aspx">http://blogs.technet.com/b/otto/archive/2007/02/09/sample-vista-ws-man-winrm-commands.aspx</a><br />
<a href="http://blogs.dirteam.com/blogs/sanderberkouwer/archive/2008/02/23/remotely-managing-your-server-core-using-winrm-and-winrs.aspx">http://blogs.dirteam.com/blogs/sanderberkouwer/archive/2008/02/23/remotely-managing-your-server-core-using-winrm-and-winrs.aspx</a><br />
<a href="http://technet.microsoft.com/en-us/library/dd163506.aspx">http://technet.microsoft.com/en-us/library/dd163506.aspx</a><br />
<br />
Happy remoting!<br />
<br />
aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-33279259330993797452013-04-23T12:02:00.000-04:002013-04-23T12:02:19.591-04:00Handy Office 365 PowerShell Cmdlets<span style="font-family: inherit;">Here are some handy Cmdlets that you may find useful when managing Office 365.</span><br />
<br />
<span style="font-family: inherit;">- Connect to the Microsoft Online Services interface for account management tasks.</span><br />
<span style="font-family: "Courier New", Courier, monospace;">import-module MSOnline<br />$cred = Get-Credential<br />Connect-MSOLService -credential $cred</span><br />
<br />
<span style="font-family: inherit;">- Connect to the Microsoft Exchange Online interface for Exchange-related tasks.</span><br />
<span style="font-family: "Courier New", Courier, monospace;">$cred = Get-Credential<br />$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri </span><a href="https://ps.outlook.com/powershell"><span style="font-family: "Courier New", Courier, monospace;">https://ps.outlook.com/powershell</span></a><span style="font-family: "Courier New", Courier, monospace;"> -Credential $cred -Authentication Basic -AllowRedirection<br />Import-PSSession $Session</span><br />
<br />
<span style="font-family: inherit;">- Set Office 365 passwords for all accounts to </span><a href="mailto:P@ssword1"><span style="font-family: inherit;">P@ssword1</span></a><span style="font-family: inherit;"> and clear Change Password Flag (not valid for ADFS customers)</span><br />
<span style="font-family: "Courier New", Courier, monospace;">Get-MsolUser | Set-MsolUser -NewPassword </span><a href="mailto:P@ssword1"><span style="font-family: "Courier New", Courier, monospace;">P@ssword1</span></a><span style="font-family: "Courier New", Courier, monospace;"> -ForceChangePassword $False</span><br />
<br />
<span style="font-family: inherit;">- Set Office 365 passwords for all accounts to never expire (not valid for ADFS customers)</span><br />
<span style="font-family: "Courier New", Courier, monospace;">Get-MsolUser | Set-MsolUser -PasswordNeverExpires $True</span><br />
<br />
<span style="font-family: inherit;">- Set Time Zone to Eastern Time and Language to English (US) for all users</span><br />
<span style="font-family: "Courier New", Courier, monospace;">get-mailbox -Filter {RecipientTypeDetails -eq 'UserMailbox'} | Set-MailboxRegionalConfiguration -Language "en-US" -TimeZone "Eastern Standard Time" -DateFormat "M/d/yyyy" -TimeFormat "h:mm tt"</span><br />
<br />
<span style="font-family: inherit;">- Get a user's mailbox permissions on a selected mailbox</span><br />
<span style="font-family: "Courier New", Courier, monospace;">Get-MailboxPermission -Identity <</span><a href="mailto:mailbox@domain.com"><span style="font-family: "Courier New", Courier, monospace;">mailbox@domain.com</span></a><span style="font-family: "Courier New", Courier, monospace;">> | Where {_.User -like '*user*'}<br />Get-RecipeintPermission -Identity <</span><a href="mailto:mailbox@domain.com"><span style="font-family: "Courier New", Courier, monospace;">mailbox@domain.com</span></a><span style="font-family: "Courier New", Courier, monospace;">> | Where {_.Trustee -like '*user*'}</span><br />
<span style="font-family: inherit;"><br /></span><span style="font-family: inherit;">- Get a list of Directly-granted rights, excluding "SELF"</span><br />
<span style="font-family: "Courier New", Courier, monospace;">Get-Mailbox | Get-MailboxPermission | Where-Object { ($_.AccessRights -like '*full*') -and ($_.IsInherited -eq $false) -and -not ($_.User -like '*nt authority\self*') }<br />Get-Mailbox | Get-RecipientPermission | Where-Object { ($_.AccessRights -like '*send*') -and ($_.IsInherited -eq $false) -and -not ($_.User -like '*nt authority\self*') }</span><br />
<br />
<span style="font-family: inherit;">- Set Shared Mailbox quota at 4.5GB</span><br />
<span style="font-family: "Courier New", Courier, monospace;">Get-Mailbox -RecipientTypeDetails SharedMailbox | Set-Mailbox -ProhibitSendQuota 4500MB -ProhibitSendReceiveQuota 5000mb -IssueWarningQuota 4400mb</span><br />
<br />
<span style="font-family: inherit;">- Get Distribution Group Members</span><br />
<span style="font-family: "Courier New", Courier, monospace;">$Reports=@()<br />$Groups=Get-DistributionGroup<br />$Groups| foreach {<br /> $GroupName=$_.DisplayName<br /> $Report=Get-distributionGroupMember -identity $_.identity| select @{Name='Distribution Group'; Expression={[String]::join(";", $GroupName)}}, DisplayName, PrimarySmtpAddress<br /> $Reports=$Reports+$Report<br /> }<br />$Reports | Export-csv -NoType -Path .\"output.csv" -ErrorAction SilentlyContinue</span><br />
<br />
<span style="font-family: inherit;">- Add Alias Domain to All Mailboxes (not valid for ADFS customers)</span><br />
<span style="font-family: "Courier New", Courier, monospace;">$users = Get-Mailbox<br />$aliasdomain = newdomain.com<br />foreach ($a in $users) {$a.emailaddresses.Add("$($a.alias)@$aliasdomain")}<br />$users | %{Set-Mailbox $_.Identity -EmailAddresses $_.EmailAddresses}</span><br />
<br />
<span style="font-family: inherit;">- Set Usage Location to United States for All users</span><br />
<span style="font-family: "Courier New", Courier, monospace;">Get-MsolUser | Set-MsolUser -UsageLocation "US"</span><br />
<br />
- Assign "Exchange Online Plan 1" License to All Users for organization TestOrg<br />
<span style="font-family: "Courier New", Courier, monospace;">Get-MsolUser | Set-MsolUserLicense -addlicenses "testorg:EXCHANGESTANDARD"</span><br />
<br />
<span style="font-family: inherit;">- Force Removal of deleted mailboxes from Recycle Bin<br />
<span style="font-family: "Courier New", Courier, monospace;">Get-MsolUser -ReturnDeletedUsers | Remove-MsolUser -RemoveFromRecycleBin -Force</span></span><br />
<span style="font-family: Courier New;"></span><br />
<span style="font-family: Courier New;"><span style="font-family: inherit;">- Get All User Mailbox Sizes<br /><span style="font-family: "Courier New", Courier, monospace;">Get-Mailbox -Resultsize Unlimited | Get-MailboxStatistics | Select-Object DisplayName,TotalItemSize</span></span><br />
<br />
<span style="font-family: inherit;">- Convert User mailbox to Room Mailbox<br /><span style="font-family: "Courier New", Courier, monospace;">Set-Mailbox -Identity ConferenceRoom -Type Room</span></span><br />
<span style="font-family: inherit;"><span style="font-family: "Courier New", Courier, monospace;">Set-MailboxFolderPermission -Identity ConferenceRoom:\Calendar -user Default -AccessRights Author</span></span><br />
</span><span style="font-family: inherit;">Let me know if there are other tasks you might like to see demonstrated!</span>aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com2tag:blogger.com,1999:blog-1456277823486235093.post-36350846981024399452013-04-11T13:11:00.004-04:002013-04-11T13:12:24.083-04:00Cannot create Exchange Online Migration Endpoint with Exchange 2007 Server using only NTLM AuthenticationI've been battling an issue for a few days now and finally stumbled upon a workable solution via PowerShell.<br />
<h3>
<br />Scenario</h3>
Client has an existing Exchange 2007 deployment. The OWA instance is configured to only use NTLM authentication. ExRCA (<a href="http://www.testexchangeconnectivity.com/">http://www.testexchangeconnectivity.com</a>) comes back clean, and I can proxy log in to any mailbox on the server.<br />
<br />
When configuring the migration endpoint through the EAC, I would receive an error that the migration endpoint could not be discovered, even after entering the credentials, server, and RPC proxy server values manually.<br />
<br />
<h3>
Solution</h3>
The solution ended up with my old friend PowerShell. You can create migration endpoints through it using the <a href="http://technet.microsoft.com/en-us/library/jj218611(v=exchg.150).aspx" target="_blank">New-MigrationEndpoint</a> cmdlet. The key was forcing the authentication to NTLM.<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">New-MigrationEndpoint -ExchangeOutlookAnywhere -Name NewEndPointName -ExchangeServer EXCHSERVER.DOMAIN.local -RpcProxyServer OWA.DOMAIN.com -Credentials (get-credential </span><span style="font-family: "Courier New", Courier, monospace;">onpremiseaccount@domain.com</span><span style="font-family: "Courier New", Courier, monospace;">) -EmailAddress </span><span style="font-family: "Courier New", Courier, monospace;">onpremiseaccount@domain.com</span><span style="font-family: "Courier New", Courier, monospace;"> -SkipVerification -Authentication NTLM</span>aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-56885718492448324732012-08-29T00:29:00.001-04:002012-08-29T00:30:24.058-04:00Error uninstalling Exchange Server 2003: One or more users currently use a mailbox store on this server.So, you're transitioning your Exchange 2003 environment to an Office 365 environment and desparately want to drop kick your Exchange 2003 server out the door. After migrating everyone's email, you open ESM, delete all of the mailboxes and start to uninstall Exchange. But then, this frustrating message shows up:<br />
<br />
<strong>The component "Microsoft Exchange Messaging and Collaboration Services" cannot be assigned the action "Remove" because:</strong><br />
<strong>- One or more users currently use a mailbox store on this server. These users must be moved to a mailbox store on a different server or be mail disabled before uninstalling this server.</strong><br />
<br />
Thanks for leaving me the fun part of trying to guess who you think still has a mailbox.<br />
<br />
Fortunately, there's an easy way to do this.<br />
<br />
Let's say your server name is <strong>EXCH01</strong>.<br />
<br />
<ol>
<li>Launch Active Directory Users and Computers.</li>
<li>In the navigation pane, right-click on your domain and select <strong>Find</strong> from the context menu.</li>
<li>In the <strong>Find Users, Contacts, and Groups </strong>window, click the <strong>Advanced</strong> tab.</li>
<li>Click the <strong>Field</strong> button, point to <strong>User</strong>, and then select <strong>Exchange Home Server</strong>.</li>
<li>Set the <strong>Condition</strong> field to <strong>Ends With.</strong></li>
<li>Enter the Exchange mailbox server you're decommissioning in the <strong>Value</strong> field (in our example, <strong>EXCH01</strong>).</li>
<li>Click <strong>Add</strong>.</li>
<li>Click <strong>Find Now</strong>.</li>
<li>Once the list of users is displayed, you can right-click on the user, select <strong>Exchange Tasks</strong>, and then select <strong>Remove Exchange Attributes</strong> from the list of options. Acknowledge the warning, and repeat for each user.</li>
<li>Restart Exchange setup.</li>
</ol>
aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com2tag:blogger.com,1999:blog-1456277823486235093.post-3024565587287164332012-08-27T23:27:00.002-04:002012-08-27T23:27:27.718-04:00Re-create BITS and Windows Update Services for Windows 7So, you had a bit of nasty malware. You're almost back to square one, but have now found yourself in the unfortunate position of having missing services--specifically the <strong>Background Intelligent Transfer Service </strong>and <strong>Windows Update </strong>services.<br />
<br />
Never fear. These, too, can be recreated in the event that your System Restore points are borked. Copy/paste the commands into an elevated command prompt.<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">REM Recreate Windows Update / BITS Services for Windows 7</span><br />
<span style="font-family: "Courier New", Courier, monospace;">sc create BITS DisplayName= "Background Intelligent Transfer Service" binpath= "c:\windows\system32\svchost.exe -k netsvcs" Start= delayed-auto depend= EventSystem/RpcSs</span><br />
<span style="font-family: "Courier New", Courier, monospace;"></span><span style="font-family: "Courier New", Courier, monospace;">sc create wuauserv DisplayName= "Windows Update" binpath= "c:\windows\system32\svchost.exe -k netsvcs" Start= delayed-auto depend= RpcSs</span>aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com9tag:blogger.com,1999:blog-1456277823486235093.post-45415466815007003372012-08-19T14:38:00.002-04:002014-01-25T11:32:51.467-05:00Bloody Queen MaryThis is a Bloody Mary (it's technically a Caesar because of the clam juice) that will make you famous. Or at least, a legend in your own mind.<br />
<br />
4 1/2 oz Clamato Juice (or a 2:1 mixure of tomato:clam juice)<br />
1 1/2 oz your favorite gin<br />
1 tsp celery salt<br />
1/2 tsp black pepper<br />
1/2 tsp Tabasco sauce<br />
1/2 tsp Lea and Perrin's Worchestershire sauce<br />
1 drop Beano's Horseradish sauce<br />
Juice of 1/4 lime<br />
<br />
Combine all ingredients and shake vigorously. Pour into a Collins or highball glass, and garnish with a deli pickle spear (don't you dare use a dill), rind of the squeezed lime, and leafy celery heart, and a couple of queen olives.aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-81084320550495956532012-08-17T11:13:00.001-04:002012-08-17T11:23:41.681-04:00Move Wireless Network Profiles Between ComputersRan into an interesting customer issue regarding connecting to a wireless network. For whatever reason, this laptop can't see the wireless network (though others in the office can). This laptop can connect to other WiFi networks without issue.<br />
<br />
My laptop, for example, was able to connect without issue. Solution? Either manually create the profile or export it from my laptop.<br />
<br />
Since I'm all about finding new and interesting ways to do things, I'd thought I'd try the "Export/Import" route.<br />
<br />
There's a little-known gem of a feature in <strong>netsh</strong> that allows for just this.<br />
<br />
<ol>
<li>Open an elevated command prompt.</li>
<li>Type <strong><span style="font-family: "Courier New", Courier, monospace;">netsh wlan show profiles</span> </strong>and press [ENTER].<br />- The output should look something like this:<br /><span style="font-family: "Courier New", Courier, monospace; font-size: x-small;"><br /><span style="font-size: small;">C:\Windows\system32>netsh wlan show profile<br />Profiles on interface Wireless Network Connection<br />Group policy profiles (read only)<br />---------------------------------<br /> </span><none><br /><span style="font-size: small;">User profiles<br />-------------<br /> All User Profile : OPincGuest<br /> All User Profile : antares<br /> All User Profile : SparkDetroit<br /> All User Profile : SecureConnect<br /> All User Profile : cobo_free<br /> All User Profile : Colonial 1<br /> All User Profile : Team Perkis-guest<br /> All User Profile : MongoNet [Working]<br /> All User Profile : Inn Public<br /> All User Profile : Android76<br /> All User Profile : bww3<br /> All User Profile : TGN<br /> All User Profile : attwifi<br /> All User Profile : aguilmettes-iPhone MyWi<br /> All User Profile : HarborLink - Buffalo Wild Wings<br /> All User Profile : milkyway</span></none></span></li>
<li>Find the profile you want to export. In this example, we're going to export my home profile, "milkyway" to a folder on the thumb drive, F:\wirelessconfig.</li>
<li>Type <strong><span style="font-family: "Courier New", Courier, monospace;">netsh wlan export profile name="milkyway" folder="F:\wirelessconfig" key=clear</span></strong> and press [ENTER].</li>
<li>Take the USB stick to the target computer and plug it in. Note the drive letter.</li>
<li>Open an elevated command prompt.</li>
<li>Type <strong><span style="font-family: "Courier New", Courier, monospace;">netsh wlan add profile filename="F:\wirelessconfig\Wireless Network Connection-milkyway.xml"</span> </strong>and press [ENTER].</li>
</ol>
aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-30493092146931656262012-07-23T17:43:00.002-04:002014-01-25T11:35:49.914-05:00Office365 Migrations and the legacyExchangeDN<span style="font-family: "Arial","sans-serif"; font-size: 10pt;">I ran across
this problem for a customer and thought I would share my experience/resolution.<o:p></o:p></span><br />
<br />
<span style="font-family: "Arial","sans-serif"; font-size: 10pt;">Migration
Scenario:<o:p></o:p></span><br />
<span style="font-family: "Arial","sans-serif"; font-size: 10pt;">- Customer
runs Exchange 2003 environment and RPC/HTTP is non-functional for the migration<o:p></o:p></span><br />
<span style="font-family: "Arial","sans-serif"; font-size: 10pt;">- Using
3rd-party tools to migrate accounts<o:p></o:p></span><br />
<span style="font-family: "Arial","sans-serif"; font-size: 10pt;">- When an
internal user replies to messages from another internal user prior to
migration, the sender receives an NDR with the X400 address of the legacy
Exchange system<o:p></o:p></span><br />
<br />
<span style="font-family: "Arial","sans-serif"; font-size: 10pt;">Tools
required:<o:p></o:p></span><br />
<span style="font-family: "Arial","sans-serif"; font-size: 10pt;">- ADFind
(joeware.net)<o:p></o:p></span><br />
<span style="font-family: "Arial","sans-serif"; font-size: 10pt;">- Microsoft
Online Services PowerShell Module<o:p></o:p></span><br />
<span style="font-family: "Arial","sans-serif"; font-size: 10pt;">- Text
editor<o:p></o:p></span><br />
<span style="font-family: "Arial","sans-serif"; font-size: 10pt; mso-fareast-font-family: Arial;"><span style="mso-list: Ignore;"></span></span><br />
<span style="font-family: "Arial","sans-serif"; font-size: 10pt; mso-fareast-font-family: Arial;"><span style="mso-list: Ignore;">1.<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><span style="font-family: "Arial","sans-serif"; font-size: 10pt;">Run
ADFIND on the customer's server. This is the syntax I used:<br />
<span style="font-family: "Courier New", Courier, monospace;">adfind -csv -h <servername> -b "<basedn>" -f
"objectClass=user" -nodn mail legacyexchangedn > userlist.csv<br /><o:p></o:p></basedn></servername></span></span><br />
<span style="font-family: "Arial","sans-serif"; font-size: 10pt; mso-fareast-font-family: Arial;"><span style="mso-list: Ignore;">2.<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><span style="font-family: "Arial","sans-serif"; font-size: 10pt;">Clean
up the email addresses in the userlist.csv file (to make sure they match the
Office 365 addresses).</span><br />
<span style="font-family: "Arial","sans-serif"; font-size: 10pt; mso-fareast-font-family: Arial;"><span style="mso-list: Ignore;">3.<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><span style="font-family: "Arial","sans-serif"; font-size: 10pt;">Connect
to the Office 365 tenant using PowerShell.<o:p></o:p></span><br />
<span style="font-family: "Arial","sans-serif"; font-size: 10pt; mso-fareast-font-family: Arial;"><span style="mso-list: Ignore;">4.<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><span style="font-family: "Arial","sans-serif"; font-size: 10pt;">Run
the following script:<o:p></o:p></span><br />
<span style="font-family: "Arial","sans-serif"; font-size: 10pt;"><br />
</span><span style="font-family: "Segoe UI","sans-serif"; font-size: 10pt;"><span style="font-family: "Courier New", Courier, monospace;">$csv
= import-csv .\userlist.csv -header Username<br />
foreach ($line in $csv) <br />
{ <br />
$user=Get-Mailbox -Identity $line.Username<br />
$user.EmailAddresses+="X500:"+$line.legacyExchangeDN<br />
Set-Mailbox -Identity $line.Username -EmailAddresses $user.EmailAddresses
<br />
}</span></span><span style="font-family: "Arial","sans-serif"; font-size: 10pt;"><o:p></o:p></span><br />
<br />
<span style="font-family: "Arial","sans-serif"; font-size: 10pt;">Let me know if this helped you out by leaving a comment.</span><br />
<br />
<span style="font-family: "Arial","sans-serif"; font-size: 10pt;">Cheers.<o:p></o:p></span>aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-83217371823972134842012-05-23T14:53:00.002-04:002012-05-23T14:53:29.886-04:00Office 365 DirSync Setup Error 1603During your journey of Office 365 nirvana, you may decide to install DirSync (or, as the setup window title more verbosely describes it, "Microsoft Online Services Directory Synchronization"). So, you spin up a new Windows Server 2008 R2 VM, join it to your domain, and, start the setup.
<br />
<br />
And then it happens.
<br />
<br />
<b>Error</b>Coexistence MSI installation failed. msiexec returned 1603 Unable to uninstall the Microsoft Online Services Directory Synchronization tool. Use the Control Panel to remove the Directory Synchronization tool.
<br />
<br />
What the heck?<br />
<br />
Oh, you must have forgotten to install the <strong>.NET Framework 3.5.1 Features</strong> feature. How silly of you.<br />
<br />
You know what to do.aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-22281743216747844382012-05-23T01:06:00.005-04:002012-07-23T12:43:46.193-04:00More MD3000i TrickeryTonight I found myself recovering a VM on a Windows 2008 R2 cluster connected to an MD3000i SAN. To make very long and painful story short, it appears that someone applied a series of Windows Updates and then a Dell DSM update that screwed up the multipathing.<br />
<br />
In the end, I resorted to breaking the cluster and then mounting the LUNs. Most of the VMs I kept on one server, but I wanted to move a handful to what used to be the other node of the cluster. However, when reassigning the LUN in the MD Client to another host, I received an error that there was already a persistent reservation on the volume and that I should talk to my administrator.<br />
<br />
In order to free the SCSI-3 reservation on the LUN, I had to run this command:<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">smcli -n <arrayname> -c "clear virtualDisk [\"virtualDiskName\"] reservations</arrayname></span><br />
<br />
After that, I was able to successfully re-assign the LUN.aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-44956526892738784442012-04-02T17:25:00.003-04:002012-04-02T17:42:18.627-04:00Quick-n-Dirty User Management for Office 365 Hybrid DeploymentsOver the past several months, we have deployed Office 365 to dozens of organizations. Several of the larger environments have asked for integration between the on-premise Active Directory environment and the Office 365 environment. For this, Microsoft has provided a roadmap using Active Directory Federation Services (ADFS) and Directory Synchronization (DirSync). This is a great solution for end users, but can be onerous for the system administrator--especially if the customer has been migrated from Exchange 2003.<br /><br />When running in any sort of Hybrid mode (or having transitioned from Exchange 2003 on-premise), there are two attributes that need to be updated/maintained with the on-premise AD in order to keep things moving along:<br /><br />- proxyAddresses<br />- targetAddress<br /><br />The <strong>proxyAddresses</strong> multi-valued attribute is used to store all of the various addresses that are bound to a user. These include (but are not limited to) SMTP and X.400 addresses. In an on-premise Exchange environment, this attribute is used to store the addresses assigned by various recipient policies.<br /><br />The <strong>targetAddress</strong> attribute stores the unique "onmicrosoft.com" address assigned to each user. During a transition, mail intended for the @domain.com address skips local mailbox delivery and is automatically forwarded to the address stored in this attribute. If the local Exchange server is kept on-line for local SMTP routing, these attributes *must* be populated for each new user, otherwise mail delivery to them from on-premise services utilizing the Exchange environment <em>will fail.</em><br /><br />To work around this, I've put together a very low-end script utilizing the <a href="http://www.quest.com/powershell/activeroles-server.aspx">Quest ActiveRoles </a>cmdlets. You will need to install these on either a workstation or server in your environment and then then save the follwing script as a .ps1 file (replacing the <domain> placeholders with your own) on the same computer where you have installed the ActiveRoles PowerShell environment.<br /><br /><span style="font-family:courier new;">Write-Host "Please enter the Active Directory ID of the user to update:"<br />$SamID = Read-Host<br />$PrimaryDomain = "domain.com"<br />$SecondaryDomain = "domain2.com"<br />$Office365Domain = "domain.onmicrosoft.com"<br /><br />Get-QADuser $SamID Set-QADUser -ObjectAttributes @{targetaddress="SMTP$SamID@$Office365Domain"}<br />Get-QADUser $SamID Add-QADProxyAddress -Address $SamID@PrimaryDomain -Primary<br />Get-QADUser $SamID Add-QADProxyAddress -Address $SamID@SecondaryDomain<br />Get-QADUser $SamID Add-QADProxyAddress -Address $SamID@Office365Domain</span></domain>aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-91327220289722868632012-02-07T10:56:00.011-05:002012-02-07T12:12:17.094-05:00Boot from VHD is Wicked AwesomeBoot from VHD is a great technology that enables you to host multiple self-contained operating systems on a single hard drive. Similar to dual-booting, but you don't have to worry about installing applications over each other or overwriting program file updates because your secondary OS is fully contained within a single virtual hard disk file.<br /><br />As someone who spends a lot of time at customer sites, I find this invaluable to maintaining a clean, portable secondary environment. My boot-from-vhd enviornment can be joined/disjoined from customer domains without affecting my corporate laptop build; I can run beta apps and install troubleshooting tools without jeopardizing the stability of my daily work computer.<br /><br />For my installation, I'm using Windows 7 Ultimate as my primary host computer and will install Windows 2008 R2 inside my VM environment.<br /><br />Requirements:<br />- <a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=696dd665-9f76-4177-a811-39c26d3b3b34">Windows Automated Install Kit (necessary for ImageX)</a><br />- Windows 2008 R2 Physical Media (or ISO + utility such as <a href="http://www.slysoft.com/en/virtual-clonedrive.html">Virtual CloneDrive </a>to mount it)<br /><br />Now, some of you will probaby grumble about needing to download the whole 1.3GB+ WAIK package for less than 1MB of software necessary to perform this task. It does seem ridiculous, that Microsoft has not made it available separately for this specific purpose (and, since WAIK is a free download, most people don't see why you can't just get the tools you need out of it). If you search around, you can find the ImageX pieces available, such as <a href="http://www.sendspace.com/file/2z6ly9">here</a> or <a href="http://www.techsupportforum.com/forums/f217/opening-wim-files-and-where-to-find-imagex-214731.html">here</a>.<br /><br />If you want to install just the ImageX componets, you need:<br />- imagex.exe<br />- intlcfg.exe<br />- vsp1cln.exe<br />- wimfltr.inf<br />- wimfltr.sys<br />- wimgapi.dll<br /><br />Extract the files from such a download to C:\Windows\System32; copy wimfltr.sys to C:\Windows\System32\drivers, and then right-click > Install on wimfltr.inf.<br /><br />Alternatively, download and install <a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=696dd665-9f76-4177-a811-39c26d3b3b34">WAIK</a>.<br /><br />Moving on ...<br /><strong></strong><br /><strong>Create a Directory to Store VHDs</strong><br /><ol><li>From Windows Explorer, create a new directory (I used C:\VHD).</li><li>Yep, that's it.</li></ol><br /><strong>Create a VHD</strong><br /><ol><li>On the start menu, click <strong>Start, </strong>type in <strong>cmd</strong>, and then press <strong>Ctrl+Shift+Enter</strong> to start an Elevated Command Prompt. right-click Computer, and then click <strong>Manage</strong>. </li><li>In the User Account Control dialog box, click <strong>Yes</strong>.</li><li>Type <strong>compmgmt.msc</strong> and press <strong>Enter</strong>.</li><li>In the left pane of the Computer Management console, click <strong>Disk Management</strong>.</li><li>In the right pane, click <strong>More Actions</strong>, and then click <strong>Create VHD</strong>.</li><li>On the <strong>Create and attach Virtual Hard Disk</strong> page, specify the location as C:\VHD\Windows2008R2.vhd, the virtual hard disk size as at 50GB, and then set the virtual hard disk format to Fixed or Dynamically expanding (depending on your preference). If it's not something you're going to use often, you can use a Dynamically Expanding VHD to save space. If you choose Fixed, you're going to have to wait for the entire 50GB (or whatever size file it is) VHD to be formatted.</li><li>Click <strong>OK</strong>.</li><li>In Disk Management, right-click the newly-created 50 GB disk, and then select <strong>Initialize Disk</strong>.</li><li>On the <strong>Initialize Disk</strong> page, verify that the VHD is selected. Choose <strong>MBR</strong> as the partition style, and then click <strong>OK</strong>. </li><li>Once the disk is initialized, right-click the unallocated space of the disk, and then select <strong>New Simple Volume</strong>.</li><li>When the <strong>Welcome to the New Simple Volume Wizard </strong>starts, click <strong>Next</strong>.</li><li>On the <strong>Specify Volume Size</strong> page, leave the default values to use the entire disk, and then click <strong>Next</strong>.</li><li>In the Assign Drive Letter or Path list, choose an unused drive letter (I chose V:), and then click <strong>Next</strong>. </li><li>Under <strong>Format this volume with the following settings</strong>, specify NTFS for the file system, use the default Allocation unit size, specify a volume name <strong>Next.</strong></li><li>On the <strong>Completing the New Simple Volume Wizard</strong> page, click <strong>Finish</strong>.</li></ol><p><strong>Mount the Windows Server 2008 R2 Media (If Necessary)</strong></p><p>This example uses <strong><a href="http://www.slysoft.com/en/virtual-clonedrive.html">Slysoft Virtual CloneDrive</a></strong></p><ol><li>Navigate to the folder where you have downloaded the Windows 2008 R2 media.</li><li>Right-click the ISO file, and then select <strong>Mount (Virtual CloneDrive E:)</strong>, where E: is the virtual DVD-ROM letter. Mine just so happens to be E:.</li></ol><p><strong>Apply the Windows Server 2008 R2 Image to the VHD</strong></p><ol><li>Go back to your Elevated Command Prompt (or launch a new one).</li><li>Run the following command to determine which Windows Server edition you wish to use:<br /><span style="font-family:courier new;">dism /Get-Wiminfo /Wimfile:"E:\Sources\install.wim"</span></li><li>Select an index number that corresponds to the edition that you wish to install. In my case, I chose Index 3.</li><li>Run the following command to apply the installation image in the appropriate index to the VHD that is currently mounted as V:\:<br /><span style="font-family:courier new;">imagex /apply "E:\Sources\install.wim" 3 v:</span></li></ol><p><strong>Update the Boot Configuration Data</strong></p><p>We'll use BCDEdit /copy to use the current boot configuration entry as the starting point for our new entry.</p><ol><li>Run the following command from your Elevated Command Prompt:<br /><span style="font-family:courier new;">bcdedit /copy {current} /d "Windows 2008 R2 VHD Boot"</span></li><li>Copy the newly-created GUID to the clipboard.</li><li>Run the following commands (using the new GUID) to instruct the Boot Manager where to look for the VHD:<br /><span style="font-family:courier new;">bcdedit /set {enter-new-GUID-here} device vhd="[locate]\VHD\Windows2008R2.vhd”<br /></span><span style="font-family:courier new;">bcdedit /set {enter-new-GUID-here} osdevice vhd="[locate]\VHD\Windows2008R2.vhd”</span></li><li>Run the following command to force hardware detection during the initial boot:<br /><span style="font-family:courier new;">bcdedit /set {enter-new-GUID-here} detecthal yes</span></li><li><span>Close the elevated command prompt.</span></li></ol><p><strong>Detach VHD</strong></p><ol><li>In <strong>Disk Management</strong>, right-click the disk that is the mounted VHD, and then click <strong>Detach VHD</strong>. </li><li>On the <strong>Detach Virtual Hard Disk</strong> page, ensure that the <strong>Delete the virtual hard disk file after removing the disk</strong> check box is <strong>NOT</strong> selected, and then click <strong>OK</strong>.</li><li>Close the Computer Management console. </li></ol>aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-10012419900531372602011-11-21T22:57:00.002-05:002011-11-21T23:02:18.508-05:00Copy Cisco Disk Image via FTPTonight, I found myself having to copy the AnyConnect binaries from one ASA 5505 to another without a device on-LAN to TFTP to. I did, however, have a public FTP server that could use to move the data around.<br /><br />This feature seems to be relatively un-discussed, so here is the syntax.<br /><br />ASA/Router Binary: my-win-package-k9.pkg<br />FTP Server: <a href="ftp://ftp.myserver.com/">ftp.myserver.com</a><br />FTP Server User Name: aarong<br />FTP Server Password: password1<br /><br /><span style="font-family:courier new;">copy disk0:my-win-package-k9.pkg </span><a href="ftp://aarong:password1@ftp.myserver.com/my-win-package-k9.pkg"><span style="font-family:courier new;">ftp://aarong:password1@ftp.myserver.com/my-win-package-k9.pkg</span></a><br /><br />Yes, it's really that simple. Would have been nice if someone told me.aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-77598089891014688472011-09-22T21:49:00.000-04:002013-08-06T21:50:23.124-04:00The Underbelly of Economics No One Talks About<div>
It's the economy, stupid.<br />
<br />
Truer words have never been spoken in a political context.<br />
<br />
I find it unfortunate that both political parties spend more time in demagoguery than speaking the truth that will set the U.S. economy free. There are a few principles that I'd like to soapbox about for a few minutes:<br />
<br />
<ol>
<li><strong>Supply and demand.</strong> It's the basis of capitalism--more demand than supply causes prices to go up; more supply than demand causes the inverse. Scarcity and price are in lock-step. Relatively simple on the whole; it, unfortunately, lends itself to monopoly and supply manipulation (for example--oil companies. They can single-handedly control how much their product costs and their profit margin by artificially restricting supply).</li>
<li><strong>Competition.</strong> Another cornerstone of capitalism is competition--more people making the same thing drives the price down; fewer providers of said good or service causes the price to go up.</li>
<li><strong>Productivity.</strong> This is the differentiating factor between companies providing the same product or service--the more productive a company's workforce, the lower it can price its product or service (see #2) and use that price advantage to gain marketshare.</li>
<li><strong>Investment.</strong> Money used for the development and growth of a company can be spent in a few different areas, such as: equipment (computers, desks, chairs, machinery), facilities (buildings or building improvements, land), labor (employees or contractors), research and development, or marketing.</li>
<li><strong>Taxes. </strong>They make the world go round; they're the bane of business and wage-earner alike. </li>
</ol>
That's really the foundation of our economy. Or is it?<br />
The debate over taxes and the effectiveness of economic stimulus has reached the point where neither side has any new information to add--they just keep repeating the same talking points over and over again, hoping that their arguments will eventually wear someone down into agreeing with them. <br />
That being said, I'd like to start off with my take on how our economy works.<br />
In our credit-based economy, corporations utilize a variety of private investment capital, stock issues, and loans to do everything from acquire inventory to pay salaries. According to monetarists, managing the interest rates on borrowing and the total money supply is the key to managing the speed of economic growth. Higher interest rates and less money in the economy means it costs more to borrow and invest in and grow the company; lower interest rates mean it's cheaper to borrow money in an attempt to grow the company or cover day-to-day expenses. <br />
The Federal Reserve Board controls this core interest rate. As William McChesney Martin, the longest-serving and most notable Federal Reserve Chairman once said, the job of the Federal Reserve is to "take away the punch bowl just as the party gets going," meaning, that raising interest rates and tightening the money supply is necessary in a robustly-growing economy to help prevent bubbles and unsustainable growth.<br />
Martin knew a thing or two about how money worked--he became a partner at A.G. Edwards after having only worked there two years and earned himself a seat at the NYSE. Having studied economics at Columbia for 6 years and been president of NYSE, he understood exactly how capital markets functioned and how to keep an even keel on business.<br />
With those concepts in mind, managing interest rates and money supply are traditionally the only tools that the Federal Reserve has to be able to manipulate the economy (policies such as quantitative easing will be put in the parking lot for the purposes of this discussion).<br />
The problem that our economy now faces is bigger than managing interest rates. If monetary policy was really the cure to economic woes, certainly lowering the interest rate to 0% would cause companies to borrow and invest like gangbusters, since they would have all this free money. Unfortunately, we've seen that monetary policy alone cannot bring a country out of a recession. <br />
Many people credit Roosevelt's Keynes-influenced New Deal with infusing the U.S. economy with enough money to grow out of the problem. While many economists debate whether it's true or not, I think there's strong evidence to support that thought (at least in part).<br />
In current political dogma, Democrats think in Keynesian terms--by injecting massive amounts of cash into public works projects, the government can drive up employment, which will turn the unemployment-collectors into taxpayers. Republicans think in Reaganomic or supply-side terms--that lowering the tax burden on the wealthy and corporations will cause them to spontaneously start investing and hiring more people. <br />
Critics of the Democratic policies point to Obama's stimulus as "failed," proclaiming that hundreds of billions of dollars were spent to achieve minimal growth and have incurred large deficits along the way. Defenders of the stimulus plan point to reports that millions of jobs were at a minimum, saved, and that it sped up economic recovery.<br />
Critics of supply-side economics (such as myself) will point to the fact that income and investment taxes are at their lowest level in decades and that the Fed has set the funds rate near 0% (it's been there for nearly 3 years), and we are still having massive unemployment problems. Defenders of those policies say that we haven't cut taxes to the point where it incents employers to create jobs.<br />
I personally believe that the stimulus package, while large, was not large enough. A good portion of it was actually diverted into investments in Chrysler and GM, which staved off an enormous crisis. I think what we really needed (and still do) is an influx of around a trillion dollars. Most economists believe that, at its best, our economy was flourishing with about a 4.5-5% unemployment rate. In Keynesian economic thought, the stimilus should be big enough to simulate economic output of our nation operating at an optimal unemployment rate. In layman's terms:<br />
<blockquote>
Consider our country as having 100 citizens. At our peak output, 95 of them are employed making $1,000 per year, and 5% of them are unemployed. Then, at some point, disaster strikes, and our employment goes to 10%. We now have 90 people making $1,000 per year. The result is that there are 5% fewer people to buy the goods and services we are producing, which leads to fewer products being sold and eventually, layoffs. In Keynesian terms, we would need a stimulus package of at least $5,000 to put that 5% of people back into the labor force and both producing and consuming goods. The world is back at equilibrium.</blockquote>
While that's an overly simplistic view, it illustrates how Keynesian economic theory works. The problem that most economists see with the previous stimulus package is that it wasn't enough to drive the employment of the extra 3 or 4% of the unemployed labor force. Instead, a smaller bill was passed--it may have softened the blow, but we still got hit with a sledgehammer.<br />
Of course, Republicans (and Tea Partiers, in particular) point to the fact that $800bn was spent for nominal effect; Democrats say that it was like a bandaid on an amputation--too little too late.<br />
In order to jump start the economy, Republicans continue the supply-side economic mantra--lowering taxes will create jobs. The problem is the same one that the Fed is having with its monetary policy--the rates are low, but it's not causing investment.<br />
I think that we could have near zero taxes and still not create a meaningful amount of jobs. The problem that we're in now is that we have a workforce fearful of losing their jobs. Corporations have discovered this fear, and have piled more and more work on their employees while cutting pay and benefits. Employees are now working harder for less, driving up productivity and adding to the company's bottom line. As long as companies can continue to squeeze work out of their existing labor force through fear, there's not going to be a meaningful positive change in unemployment.<br />
I believe that the only way out of this downward spiral is a truly massive influx of cash into public sector employment (especially infrastructure) to drive demand for other goods and services to a level that companies are forced to hire more workers to meet that demand. Getting the unemployment down a few points by itself isn't enough--it needs to be large enough to cause us to exceed our current economic output capacity, which will then cause the private sector to create jobs to meet that demand. Employers aren't going to create jobs until they know there will be a sustainable demand for their products and services.<br />
The large anti-government crowd are naive pawns being used by conservative politicians to promote a lower-tax agenda. Unfortunately, most of us will never make the kind of money to be impacted one way or another by increasing the marginal tax rate on income over $1,000,000 or raising the capital gains tax. The trickle-down economic policies don't work--the rich keep their wealth or move it overseas to avoid being taxed; they don't create jobs with it.<br />
In the end, we need a balanced approach--something that neither side of our polarized political system is interested in pursuing.</div>
aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-53053073573968370072011-08-24T16:46:00.008-04:002011-08-25T09:05:34.722-04:00Set "Password Never Expires" for Microsoft BPOS Standard Accounts<span style="font-family:arial;">Cries of joy are ringing throughout the Microsoft BPOS Partner community--the ability to set "Password Never Expires" for BPOS Standard Accounts has *finally* been released. Previously available only for BPOS-D customers, Microsoft has ported the command to the newest update of the Microsft Online Services Migration Tools (available for x86 </span><a href="http://www.microsoft.com/download/en/details.aspx?id=5015"><span style="font-family:arial;">here </span></a><span style="font-family:arial;">and x64 </span><a href="http://www.microsoft.com/download/en/details.aspx?id=7013"><span style="font-family:arial;">here</span></a><span style="font-family:arial;">). </span>
<br /><span style="font-family:arial;"></span>
<br /><span style="font-family:arial;">So, once you've downloaded and installed the updated tools, how do you avail yourself of this helpful feature?</span>
<br /><span style="font-family:arial;"></span>
<br /><strong><span style="font-family:arial;">Set "Password Never Expires" for All Enabled Users</span></strong>
<br /><span style="font-family:arial;">1. Open Migration Command Shell.</span>
<br /><span style="font-family:arial;">2. Copy/paste the following commands:</span>
<br /><span style="font-family:arial;"></span>
<br /><span style="font-family:courier new;">$cred = Get-Credential</span>
<br /><span style="font-family:courier new;">Get-MSOnlineUser -enabled -Credential $cred | Set-MSOnlineUserPasswordNeverExpire -Credential $cred -PasswordNeverExpire $true</span>
<br /><span style="font-family:arial;"></span>
<br /><span style="font-family:arial;">Drop in your BPOS administrative credentials (in the form of <a href="mailto:user@domain.com">user@domain.com</a> and password) in the pop-up dialog box when prompted.</span>
<br />aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-63477878601763135502011-07-20T10:35:00.007-04:002011-09-07T11:26:50.734-04:00Windows XP Automatic Updates service is missing<span style="font-family:arial;">Recently, there have been a rash of "fake antivirus" viruses and trojans floating around the internet. Two of the more frustrating issues:<br /><br />- Why are all my icons hidden?<br />- Where the heck did my Automatic Updates service go?</span><br /><span style="font-family:arial;">- Why am I getting Windows Update Error 0x80072EFE?<br /><br />The icons hidden one is fairly benign and relatively easy to resolve:<br />1. Open Windows Explorer.<br />2. Select Tools > Folder Options.<br />3. Select the <strong>View</strong> tab.<br />4. Select the <strong>Show hidden files and folders</strong> radio button and click <strong>OK</strong>.<br />5. From Windows Explorer, navigate to C:\.<br />6. Right-click on the folder "Documents and Settings" and click <strong>Properties</strong>.<br />7. Clear the "Hidden" checkbox.<br />8. When prompted, choose to apply to all subfolders and files.<br /><br />As far as the Automatic Updates issue goes, it's a little trickier. These particular strains of malware do everything from unregister DLLs to removing the Windows Update service altogether. Most of the time, the solution involves one or more of the following tasks:</span><br /><span style="font-family:arial;">- Re-registering the WUAU DLLs</span><br /><span style="font-family:Arial;">- Re-registering Internet Explorer DLLs</span><br /><span style="font-family:arial;">- Deleting the cached update downloads</span><br /><span style="font-family:arial;">- Resetting the cryptographic service database</span><br /><span style="font-family:arial;"></span><br /><span style="font-family:arial;">Copy/paste the following script into Notepad and save it as a .bat file:<br /><br />net stop wuauserv /y</span><br /><span style="font-family:Arial;">net stop bits /y</span><br /><span style="font-family:Arial;">net stop cryptsvc /y</span><br /><span style="font-family:Arial;">ren %systemroot%\system32\catroot2 catroot2_old</span><br /><span style="font-family:Arial;">rd /s /q %systemroot%\SoftwareDistribution</span><br /><span style="font-family:arial;">regsvr32 /s actxprxy.dll</span><br /><span style="font-family:arial;">regsvr32 /s atl.dll</span><br /><span style="font-family:arial;">regsvr32 /s browseui.dll</span><br /><span style="font-family:arial;">regsvr32 /s cdm.dll<br />regsvr32 /s cryptdlg.dll<br />regsvr32 /s dssenh.dll<br />regsvr32 /s gpkcsp.dll<br />regsvr32 /s initpki.dll<br />regsvr32 /s iuengine.dll<br />regsvr32 /s mshtml.dll</span><br /><span style="font-family:arial;">regsvr32 /s msxml.dll<br />regsvr32 /s msxml2.dll<br />regsvr32 /s msxml2r.dll<br />regsvr32 /s msxml3.dll<br />regsvr32 /s msxml3r.dll<br />regsvr32 /s msxmlr.dll<br />regsvr32 /s oleaut32.dll</span><br /><span style="font-family:arial;">regsvr32 /s qmgr.dll<br />regsvr32 /s rsaenh.dll<br />regsvr32 /s sccbase.dll</span><br /><span style="font-family:arial;">regsvr32 /s shdocvw.dll<br />regsvr32 /s slbcsp.dll<br />regsvr32 /s softpub.dll</span><br /><span style="font-family:arial;">regsvr32 /s urlmon.dll<br />regsvr32 /s wintrust.dll<br />regsvr32 /s wuapi.dll<br />regsvr32 /s wuaueng.dll<br />regsvr32 /s wuaueng1.dll<br />regsvr32 /s wuauserv.dll<br />regsvr32 /s wucltui.dll<br />regsvr32 /s wups.dll<br />regsvr32 /s wups2.dll<br />regsvr32 /s wuweb.dll</span><br /><span style="font-family:Arial;">net start cryptsvc</span><br /><span style="font-family:Arial;">net start bits</span><br /><span style="font-family:Arial;">net start wuauserv</span><br /><span style="font-family:arial;"></span><br /><span style="font-family:arial;">Run. The "Automatic Updates" service should now be visible in the Services applet.</span>aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-73314607561159357012011-05-20T00:16:00.004-04:002011-05-20T00:30:10.136-04:00Internet Explorer 8 and the continuous "Manage Add-Ons" PromptWhile trying to deploy the Microsoft Online Services Single Sign-On Tool for a customer migrating to BPOS, I found myself sitting at a customer's computer banging my head against the wall. When I'd launch the tool and sign in as the user, I kept on getting the "Unable to prepare certificate" error.<br /><br />The MSOL tool is dependent on a number of things:<br />- .NET Framework 2.0 or later<br />- Correct time (within 5 minute skew of the MSOL servers)<br />- Internet Explorer as your default browser<br /><br />I was OK on the firsts two items, but I had noticed that my customer had installed both Firefox and Chrome. No big deal, right? I launch IE and set it as the default browser and attempt to reconfigure the sign-on tool (to no avail).<br /><br />I proceed to follow the traditional troubleshooting steps:<br />- Uninstall/reinstall Online Services Single Sign-On Tool<br />- Uninstall/reinstall .NET Framework from 4.0 down to 2.0 and back again<br />- Reset IE to default settings.<br /><br />Neither of these fixed my problem.<br /><br />I launched IE and was faced with what I thought was an annoyance--the "Manage Add-Ons" window kept popping up with my default search providers. I'd set it, close IE, restart, and get the dialog box again.<br /><br />I thought, "Now I'm getting somewhere." I thought maybe there was a piece of malware affecting the customer's system, so I downloaded one of my favorite programs, ran a scan, and didn't find anything.<br /><br />In the end, I stumbled upon a tip from another hapless soul facing my same problem:<br /><br />1. Make sure all IE windows are closed. To be sure, you can open a command prompt and run <strong>taskkill /im iexplore.exe /f</strong> .<br />2. Open Regedit.<br />3. Navigate to HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders.<br />4. Right-click, point to New > Expandable String Value.<br />5. Type <strong>AppData</strong> and press ENTER.<br />6. Double-click the new <strong>AppData</strong> value and enter <strong>%userprofile%\Application Data </strong>and click OK.<br />7. Try launching IE again.aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-26525255706793695292011-02-02T23:47:00.003-05:002011-02-03T00:42:24.796-05:00Exchange 2010 Messages Stuck in Retry status in "MapiDeliveryQueue"In case your Exchange admin life wasn't difficult enough, you can always have this problem, manifested with the following symptoms:<br /><br />- Mail delivery hung<br />- Messages stuck in local delivery "MapiDeliveryQueue" with a status of "Retry"<br /><br />Classic tactics such as restarting the server or right-clicking the queue and selecting "Retry" have no effect.<br /><br />The key here is that Exchange 2007 and later treat these messages differently than standard SMTP queues. In order to process these messages, they need to be re-submitted using the following Exchange cmdlet:<br /><br /><span style="font-family:courier new;">Retry-Queue -Filter {Status -eq "Retry"} -Server "exchangeserver" -resubmit $true</span><br /><br />The default re-submit queue time is 12 hours. To modify this:<br /><br />1. Using Notepad, edit the file: C:\Program Files\Microsoft\Exchange Server\V14\Bin\EdgeTransport.exe.config.<br />2. Modify the following line in the <span style="font-family:courier new;"><appsettings></span> section:<br /><br /><span style="font-family:courier new;"><add key="MaxIdleTimeBeforeResubmit" value="<hh:mm:ss>"/></span><br /><br />3. Save the file.<br />4. Open up the Exchange Command shell and run <span style="font-family:courier new;"><strong>restart-service *rt</strong></span>aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-3809310622151975122011-01-22T13:02:00.008-05:002011-01-22T13:16:19.492-05:00IIS 6.0 404 Error for a file you *know* is thereThis morning I was doing some maintenance on a customer's machine and needed to reinstall the application. The customer site is closed, but the work still needs to be done. I had a copy of the ISO media available on a server in our office, so the solution seemed obvious: drop it on a web server and pull it down from the client's machine.<br /><br />So, I created a directory on one of our web servers, placed the ISO file there, and turned on "Directory Browsing" for that directory. I then logged into my customer's machine and navigated to the site and found the file. I right-clicked on the file, hit "Save Target As..." and ....<br /><br /><span style="font-family:arial;"><span style="font-family:courier new;">Internet Explorer cannot download myfile.iso from my.webserver.com.<br />Internet Explorer was not able to open this Internet site. The requested site is either unavailable or cannot be found. Please try again later.<br /></span><br /></span>I went back to the site and this time, just clicked on the file name, and was greeted with the generic 404 message.<br /><br />Fortunately, the solution is very simple and only takes a few seconds.<br /><br />1. Open up IIS Manager.<br />2. Navigate to the web site (if you don't want to change the setting for the entire web server, you can just navigate to the directory path off the web site).<br />3. Right-click > Properties on the website (or directory).<br />4. Select the "HTTP Headers" tab.<br />5. Select the "MIME Types" button.<br />6. Click the "New" button.<br />7. Add the extension type (in my case, ISO).<br />8. Add the MIME type (in my case, application/octet-stream).<br />9. Click OK three times.<br /><br />Try to re-download the file in your browser.<br /><br />The reason for this behavior is described in detail in the IIS 6.0 documentation <a href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/deeac9ef-cf55-4acd-86ce-b46022ff5479.mspx?mfr=true">here</a>.aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-60159838977280273362011-01-04T11:32:00.005-05:002011-01-04T11:43:00.720-05:00How to fix a bad/corrupt/hidden source in CydiaI was adding a new Cydia repository the other day to my iPhone and apparently mistyped something. I deleted it from the GUI, but every time I went to search Cydia for an application or manage my source list, I received an error that the repository was unavailable and then received the following error:<br /><br /><span style="font-family:courier new;">Sub-process bzip2 returned an error code (2)</span><br /><p>Fortunately, there's a way to fix it. You'll need a few pieces of software:<br /></p><ul><li>OpenSSH installed on your iDevice</li><li>WinSCP (free Windows Secure Copy client; available at <a href="http://sourceforge.net/projects/winscp">http://sourceforge.net/projects/winscp</a>)</li><li>plist Editor for Windows (Mac OS Property List editor; <a href="http://www.ipodrobot.com/blog/2009/02/free-plist-editor-for-windows-10-released.htm">http://www.ipodrobot.com/blog/2009/02/free-plist-editor-for-windows-10-released.htm</a>)<br /></li></ul><ol><li>Make sure you have SSH access to your iDevice When you installed Cydia, you had the option for which tool sets you wanted. If you didnt' select a tool set that includes command-line tools, you'll need to install those first (OpenSSH is the main piece that's required). If SSH isn't working, you'll need to reinstall it and then respring your device.</li><li>Test your SSH login credentials by using an SSH client such as putty connecting to your device's WiFi address and logging in as 'root.' If you have not changed the root password, the default is 'alpine.'</li><li>Using a secure copy client (such as WinSCP), connect to your iDevice and navigate to <span style="font-family:courier new;">/private/etc/apt/source.list.d</span>.</li><li>Right-click > Edit the cydia.list file, remove the offending line, and click Save. Close the WinSCP editor.</li><li>Navigate to <span style="font-family:courier new;">/private/var/lib/cydia</span>.</li><li>Copy the metadata.plist file to your computer.</li><li>Using plist editor, open the metadata.plist on your computer.</li><li>Search for the repository you need to remove. The line will look something like <key><span style="font-family:courier new;">deb:http://repositoryname/:./<key></span></li><li>Select and delete down to the next key <key>tag. Your selection should start with an <dict>open key tag and end with a close dict tag and should contain approximately 9 lines of data.</li><li>Copy it back to <span style="font-family:courier new;">/private/var/lib/cydia</span> and overwrite the existing file.</li><li>Navigate to <span style="font-family:courier new;">/private/var/lib/apt/lists</span> and delete the files starting with the name of the source you wish to remove.</li><li>Navigate to <span style="font-family:courier new;">/private/var/lib/apt/list/partial</span> and do the same.</li><li>Close WinSCP and respring your iDevice.</li></ol>aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0tag:blogger.com,1999:blog-1456277823486235093.post-46113332797654151162010-12-16T11:01:00.004-05:002010-12-16T11:17:15.667-05:00Bulk add host headers to IIS siteKind of in line with my previous post of bulk adding DNS zones and configuring secondaries is the need to bind multiple new host headers to a customer's site. Doing it from the IIS Manager is tedious, to say the least.<br /><br />Fortunately, there is a way to bulk do this as well. This method is a little clunky, but still way better than doing it all manually.<br /><br />1. From IIS Manager, locate the identifier for your website (if it's not the default site).<br />2. Open a command prompt and navigate to (default) \Inetpub\Adminscripts.<br />3. Run the following command:<br /><br />cscript adsutil.vbs get w3svc/{site identifier}/serverbindings<br /><br />The reason this has to be done is the adsutil.vbs set command will overwrite this settings (not add to them), so if you just plug in your new host headers, you'll lose all of your old ones!<br /><br />You should get an output that looks similar to this:<br /><br /><span style="font-family:courier new;font-size:85%;">":80:www.oldhostheader1.com"</span><br /><span style="font-family:courier new;font-size:85%;">":80:www.oldhostheader2.com"</span><br /><br />4. Copy/paste the output into a notepad window. Delete the white spaces until it's all one continuous line.<br />5. Using the same format, add your new host headers to this list so that it looks like this:<br /><br /><span style="font-family:courier new;font-size:85%;">":80:www.oldhostheader1.com" ":80:www.oldhostheader2.com" ":80:www.newhostheader1.com" ":80:www.newhostheader2.com"</span><br /><br />6. At the beginning of the line, prepend <strong>cscript adsutil.vbs set w3svc/{siteidentifier}/server bindings</strong>, and save it as a .bat file.<br />7. Run.aaronhttp://www.blogger.com/profile/06451148032020040225noreply@blogger.com0